Установить свойства виджета в 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
El 28 de abril se celebra en todo el mundo el #DíaDeLaSeguridadYSalud en el #Trabajo.
En esta jornada se rinde homenaje a las víctimas de los accidentes de trabajo y las enfermedades profesionales.
En 2024, el lema es "Los impactos del cambio climático en la seguridad y la salud en el trabajo".
La idea primordial es crear una conciencia social para disminuir los riesgos y daños que puedan sufrir los empleados y profesionales en el campo laboral.
📝 Carlos Alberto García
#Holguín
#Cuba
#Francia y la contradicción entre presión contra #migraciones, caída de la #natalidad y mercado de #trabajo
https://www.lemonde.fr/idees/article/2024/01/18/baisse-des-naissances-un-defi-pour-notre-modele-social_6211557_3232.html
Trabajadores destacados de diferentes sectores y dirigentes sindicales holguineros fueron reconocidos por sus méritos laborales extraordinarios, aportes importantes a la economía, y su correcta y sostenida actitud ante el #Trabajo.
El acto de condecoraciones, concebido dentro del programa de actividades por el #PrimeroDeMayo, se celebró este lunes en la Plaza de la Revolución Calixto García Íñiguez de #Holguín, y contó con la presencia de Joel Queipo Ruiz, miembro del Comité Central y primer secretario del Partido en la provincia; el General de División Eugenio Ravilero Aguilera, jefe del Ejército Oriental, e Idalmis Serrano Gómez, secretaria general en el territorio de la Central de Trabajadores de #Cuba (#CTC), entre otros dirigentes del Partido, el Gobierno, las organizaciones de masas, la Unión de Jóvenes Comunistas, las Fuerzas Armadas, y la Asociación de Combatientes de la Revolución Cubana.
@jobs_bot
Qué puede hacer este bot?
Un bot oficial que enumera las oportunidades de Carrer en Telegram y acepta solicitudes de candidatos.
Idioma: Inglés
(visto en @BotsGram_cu)
#trabajo, #carrera, #oportunidad, #oficial
🔥🇻🇪 Maduro: Venezuela desafió la crisis con una estrategia económica propia
⚡️El presidente Nicolás Maduro afirmó que Venezuela logró enfrentar la crisis inducida mediante una estrategia económica alternativa, centrada en la indexación salarial y el fortalecimiento del mercado interno.
Según explicó en su conversación con Ignacio Ramonet, estas políticas rompieron con los esquemas tradicionales aplicados en otros países y permitieron sostener el poder adquisitivo, el empleo y la actividad productiva nacional.
🗣️ “De esto no se habla en el mundo”, enfatizó el mandatario.
#EconomíaVenezolana#MercadoInterno
#Indexación#Trabajo#Producción
#Emprendimiento#ResistenciaEconómica
🤑Oportunidad única!! Curso Profesional de porcelana líquida 3D ahora en su país!
.
😎 Comience 2022 con el pie derecho!
.
Aprenda en un fin de semana una NUEVA PROFESIÓN con esta innovadora técnica de aplicación de pisos y transforme cualquier ambiente simple en algo extremadamente lujoso.
.
✅ Servicio con pronóstico de ALTA DEMANDA en 2022.
✅ Muy poca competencia. ¡Disfrútalo!
✅ Alto margen de BENEFICIO
✅ Excelente oportunidad para montar su negocio en 2022!
❌ Últimas Vacantes en el curso
Da clic en en enlace del perfil o en el siguiente 👇🏻👇🏻
Aprovecha el descuento del 50%
bit.ly/PISOSENPORCELANATO_DESCUENTO
#mesa#porcelanato#encimeras#joyas#mesaderesina#empresario#arquitectura#negociopropio#trabajo#resina#cosasdelacasa#desing#joyasderesina#casa#resinaartist#carpenter#cocinasmoderna#dinero#casalujosa#decoracioninteriores#bhfyp