Установить свойства виджета в 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
💥Alfombrillas universales GOODYEAR GOD9023
Renueva el interior de tu coche con estilo esta Navidad
✅OFERTA: 22.48€
❌ Antes: 36.23€
💰Ahorras un 38%🔥
Protege el suelo de tu vehículo de forma eficaz y con un diseño moderno
👉 Haz que tu coche luzca impecable ahora
#alfombrillas#coche#ofertas#descuentos#viral#navidad
🛰️Oferta publicada en Coche y Moto
💥Tapacubos Sparco Lazio
Dale un toque elegante a tu coche esta Navidad
✅OFERTA: 33.9€
❌ Antes: 52.5€
💰Ahorras un 35%🔥
Renueva la estética de tus ruedas con estilo y calidad
👉 Haz que tu coche brille estas fiestas
#sparco#tapacubos#coche#ofertas#descuentos#navidad
🛰️Oferta publicada en Coche y Moto
💥Luces LED para coche YiLaie
Ambienta tu vehículo con 16 millones de colores y control de aplicación
✅OFERTA: 20.79€
❌ Antes: 25.99€
💰Ahorras un 20%🔥
Crea un ambiente único y personalizado en tu coche durante tus viajes
👉 Ilumina tu camino con estilo
#rebajas#lucesled#ambientergb#coche#descuentos
🛰️Oferta publicada en Coche y Moto
💥Ambi Pur Brisa Marina Difusor para Coche
Llena tu auto de frescura y vitalidad marina
✅OFERTA: 15.99€
❌ Antes: 23.82€
💰Ahorras un 33%🔥
Elimina olores y deja una agradable fragancia en cada trayecto
👉 Renueva la atmósfera de tu coche
#fragancia#ambientador#coche#ofertas#viral#navidad#descuentos
🛰️Oferta publicada en Coche y Moto
💥Cámara de Visión Trasera para Coche 720P
Mejora la seguridad al estacionar con visión nocturna y gran angular
✅OFERTA: 7.49€
❌ Antes: 9.99€
💰Ahorras un 25%🔥
Visualiza claramente lo que sucede detrás de tu vehículo, incluso en la oscurida
👉 Añade seguridad a tu conducción ahora
#rebajas#camara#visiontrasera#coche#ofertas
🛰️Oferta publicada en Coche y Moto
💥Cables de arranque OSRAM OSC500A 50mm²
Enciende la Navidad con seguridad
✅OFERTA: 49.19€
❌ Antes: 68.2€
💰Ahorras un 28%🔥
Arranca tu vehículo fácilmente en caso de emergencia
👉 Hazte con ellos ahora
#arranque#coche#automovil#ofertas#descuentos#viral#navidad
🛰️Oferta publicada en Coche y Moto
💥Protector de Borde para Coche Romon
Protege tu vehículo con estilo y seguridad
✅OFERTA: 10.82€
❌ Antes: 14.6€
💰Ahorras un 26%🔥
Evita arañazos y golpes en las puertas al estacionar
👉 Asegura la protección de tu coche esta temporada
#protectordeborde#coche#seguridad#proteccion#rebajas#descuentos#viral
🛰️Oferta publicada en Coche y Moto
💥Arrancador de Baterías WOLFBOX 4000A
Potencia y fiabilidad para tu coche en invierno
✅OFERTA: 100.36€
❌ Antes: 139.99€
💰Ahorras un 28%🔥
Arranca motores de gasolina y diésel sin problemas, con carga rápida y luz LED
👉 No te quedes varado, consíguelo ahora
#rebajas#arrancadordebaterias#coche#motor#ofertas#descuentos#tecnologia#invierno
🛰️Oferta publicada en Coche y Moto
💥Filtro aire habitáculo VALEO 715752 PROTECT
Respira aire puro y fresco en tu coche esta Navidad
✅OFERTA: 13.24€
❌ Antes: 17.06€
💰Ahorras un 22%🔥
Protección total contra polen, polvo, bacterias, gases y malos olores
👉 Renueva el aire de tu coche ahora
#filtroaire#filtroantipolen#proteccion#coche#navidad#ofertas#descuentos#viral
🛰️Oferta publicada en Coche y Moto
💥Kit de pedales para coche OCC MOTOR SPORT
Dale un toque deportivo a tu vehículo estas fiestas
✅OFERTA: 5.99€
❌ Antes: 12.04€
💰Ahorras un 50%🔥
Mejora la estética y funcionalidad de tu coche con este kit universal de 3 pieza
👉 Renueva tu conducción ahora
#pedalescoche#kitpedales#ofertas#descuentos#coche#motor#navidad#viral
🛰️Oferta publicada en Coche y Moto
💥Detector de Velocidad de Radar de Coche 360
Protege tu camino en estas fiestas
✅OFERTA: 15.0€
❌ Antes: 19.0€
💰Ahorras un 21%🔥
Monitoreo de larga distancia con modos de ciudad/carretera
👉 Mantén la seguridad en cada viaje
#detectordevelocidad#radar#coche#seguridadvial#ofertas#tecnologia#navidad#descuentos
🛰️Oferta publicada en Coche y Moto
💥Detector de Radar y Cámara GPS para Coche 16 Bandas 360 (Rojo)
Protege tu trayecto con la última tecnología
✅OFERTA: 15.0€
❌ Antes: 20.64€
💰Ahorras un 27%🔥
Alerta temprana de radares y cámaras para una conducción segura
👉 No te arriesgues, adquiérelo ahora
#alertadevoz#detectorradar#coche#seguridad#gps#ofertas#descuentos#navidad
🛰️Oferta publicada en Coche y Moto