Установить свойства виджета в PySide можно не только через соответствующие методы и конструктор класса. Можно их изменять с помощью метода setProperty по имени.
btn = QPushButton("Click Me")
btn.setProperty("flat", True)
Это аналогично вызову
btn.setFlat(True)
Если указать несуществующее свойство, то оно просто создается
btn.setProperty("btnType", "super")
Получить его значение можно методом .property(name)
btn_type = btn.property("btnType")
Когда это может быть полезно?
▫️Можно просто хранить какие то данные в виджете и потом их доставать обратно
widget = QWidget()
widget.setProperty('my_data', 123)
print(widget.property('my_data'))
▫️ Назначая эти свойства разным виджетам можно потом отличить виджеты во время итераци по ним. Например, найти все кнопки со свойством my_data="superbtn".
Но ведь вместо кастомного свойства можно использовать objectName, будет тот же результат.
Да, но y ObjectName есть ограничение - только строки.
▫️ Если нам потребуется не просто поиск а, например, сортировка по числу, то свойства позволяют нам это сделать. Поддерживается любой тип данных
widget.setProperty('my_data', {'Key': 'value'})
widget.setProperty('order', 1)
all_widgets.sort(key=w: w.property('order'))
Но ведь Python позволяет всё вышеперечисленное сделать простым созданием атрибута у объекта
widget.order = 1
widget.my_data = 123
Да, но я думаю что не надо объяснять почему не стоит так делать. К тому же, если у виджета нет свойства то метод .property(name) вернет None, а отсутствующий атрибут выбросит исключение.
▫️ Действительно полезное применение кастомным свойствам - контроль стилей. Здесь атрибутами не обойтись, нужны именно свойства.
Дело в том, что в селекторах стилей можно указывать конкретные свойства виджетов на которые следует назначать стиль.
Просто запустите этот код
from PySide2.QtWidgets import *
if __name__ == "__main__":
app = QApplication([])
widget = QWidget(minimumWidth=300)
layout = QVBoxLayout(widget)
btn1 = QPushButton("Action 1")
btn2 = QPushButton("Action 2")
btn3 = QPushButton("Action 3", flat=True)
layout.addWidget(btn1)
layout.addWidget(btn2)
layout.addWidget(btn3)
# добавим кастомное свойство одной кнопке
btn1.setProperty("btnType", "super")
# добавляем стили
widget.setStyleSheet(
"""
QPushButton[btnType="super"] {
background-color: yellow;
color: red;
}
QPushButton[flat="true"] {
color: yellow;
}
"""
)
widget.show()
app.exec_()
С помощью селектора мы избирательно назначили стили на конкретные кнопки.
Как получить список всех кастомный свойств?
Функция получения списка кастомных свойств отличается от получения дефолтных.
def print_widget_dyn_properties(widget):
for prop_name in widget.dynamicPropertyNames():
property_name = prop_name.data().decode()
property_value = widget.property(property_name)
print(f"{property_name}: {property_value}")
#tricks#qt
· · • • •🎃• · · HALLOWEEN · · •🎃• • • · ·
Bien como la mayoría votó por una historia de terror les traigo 2 leyendas urbanas muy conocidas espero que les guste.
#festivos#halloween
· · • • • • • · · · · • • • 🎃• • • · · · · • • • • • · ·
· · • • •🎃• · · HALLOWEEN · · •🎃• • • · ·
Calabazas, faros, disfraces horrorosos, pero también fiestas hasta madrugada... ¡Sí, se trata de Halloween, una fiesta que se celebra, sobre todo, en los Estados Unidos pero que goza de gran fama en todo el mundo!
¿Habéis pensado ya cuánto sabéis sobre Halloween? Hoy he decidido hablaros un poco de esta tradición y sus curiosidades.
#curiosidades#festivos#halloween
· · • • • • • · · · · • • • 🎃• • • · · · · • • • • • · ·
· · • • •❄️• · · San Valentín · · • ❄️• • • · ·
San Valentín llega puntual como cada año y si eres fiel a la tradición más edulcorada del calendario necesitas ideas frescas para sorprender. Prueba con estas 😉.
#SanValentin#ideas#festivos
· · • • • • • · · · · • • • ☃️ • • • · · · · • • • • • · ·
· · • • • •🎄• · · NAVIDAD · · •🎄• • • • · ·
En el post de hoy intentaré sacaros de más de un apuro con estas manualidades para regalar. Espero que les gusten.
#festivos#navidad
#recomendación
· · • • • • • · · · · • • • 🎄• • • · · · · • • • • • · ·
· · • • • •🎄• · · NAVIDAD · · •🎄• • • • · ·
Si hay algo que nos gusta en Navidad (además de recibir regalos y comer hasta morir) es ver películas de temática navideña, enfundados en un jersey calentito y, a poder ser, con un buen tazón de chocolate caliente. Así que he recopilado para ti las mejores películas para ver en navidad.
#festivos#navidad
#recomendación
· · • • • • • · · · · • • • 🎄• • • · · · · • • • • • · ·
· · • • • •🎄• · · RECETA · · •🎄• • • • · ·
Estos cupcakes de chocolate están cubiertos por una crema de Nutella que a los niños les encantará y son ideales para compartir un día como hoy.
¿A que os gustan estos cupcakes de chocolate tan navideños que os traemos hoy?
#festivos#receta#navidad
· · • • • • • · · · · • • • 🎄• • • · · · · • • • • • · ·
· · • • • •❄️• · · · FONDOS · · · • ❄️• • • • · ·
Hola personitas bellas ya entramos en el mes del amor y la amistad por lo que hoy les traigo unos bellos fondos para parejas y amig@s que espero que les gusten y los puedan utilizar😊
#fondos#SanValentin#festivos
· · • • • • • · · · · • • • ☃️ • • • · · · · • • • • • · ·