Установить свойства виджета в 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
· · • • • •🎄• · · NAVIDAD · · •🎄• • • • · ·
Tazas decoradas para regalar en navidad
Este es el regalo perfecto para los amantes del #café. Una taza es algo que siempre viene bien, pero si una te parece poco, atrévete con un juego de 4 o 6 tazas. Te recomiendo elegir dos colores básicos y jugar con ellos para decorar las tazas. En la foto del ejemplo han utilizado el color blanco y el gris topo para hacer este juego de tazas. En unas han hecho puntos de diferentes tamaños y diferentes formas y en el resto de las tazas han elegido un motivo geométrico con rayas en zigzag entrecortadas. ¿Os gusta esta idea?
· · • • • • • · · · · • • • 🎄• • • · · · · • • • • • · ·
· · · • • • • •❄️• · · CAFÉ· · •❄️• • • • • · · ·
¡Qué rico está el café! Una costumbre muy arraigada en nuestra sociedad que sienta tan bien… Y, además, tiene múltiples beneficios. Y más a primera hora de la mañana, cuando se absorben mejor sus beneficios por el organismo, a la vez que te ayuda a activarte y ponerte en marcha. No te prives de sus beneficios y, sin excederte, disfruta de tomar café por la mañana.
#cuidado_personal
#consejos
#café
· · • • • • • · · · · • • • ☃️• • • · · · · • • • • • · ·
Hola me encontré un dato curioso y me gustaría compartirlo.
📌Después de tanta aceptación y con el objetivo de que sea una celebración unificada y que se promueva, aún más, su consumo, la Organización Internacional del Café (OIC) decretó el 1ro de octubre como el Día Internacional del Café, y además de decretar un único día para esta festividad, desde la organización afirman que la celebración busca “otorgar reconocimiento a los millones de personas de todo el mundo que trabajan duro para crear la bebida que tanto nos gusta”.
#café☕#fechas_para_celebrar#datos_curiosos
· · · • • • • •🌼• · · CAFÉ· · •🌼• • • • • · · ·
Es como un pequeño ritual. Hacemos una taza de café, bebemos nuestros cafés y tiramos la bolsita de café o el filtro. Sin embargo, la próxima vez deberíamos saltarnos ese paso final. Los posos de café son aparentemente útiles para muchas tareas domésticas. ¡No tires los posos de café! Puedes usarlos para estas 7 tareas del hogar
#remedios#consejos#limpieza#café
· · • • • • • · · · · • • • 🍃• • • · · · · • • • • • · ·