Установить свойства виджета в 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
💥Pack 2 Tapo P100 - Enchufes inteligentes Wi-Fi
Automatiza tus dispositivos y ahorra energía en casa
✅OFERTA: 18.99€
❌ Antes: 29.99€
💰Ahorras un 37%🔥
Control remoto, programación de horarios y compatibilidad con asistentes de voz
👉 Haz tu hogar más inteligente ahora
#enchufeinteligente#ahorrodeenergia#hogarinteligente#ofertas#rebajas
🛰️Oferta publicada en Hogar
💥Tapo P110 (4 paquetes) Mini enchufe inteligente Wi-Fi
Automatiza tu hogar y ahorra energía con estos enchufes inteligentes. Controla t
✅OFERTA: 32.99€
❌ Antes: 59.99€
💰Ahorras un 45%🔥
Optimiza tu consumo energético, simplifica tu rutina diaria y disfruta de un hog
👉 Haz tu hogar más inteligente hoy
#enchufeinteligente#ahorrodeenergia#hogarinteligente#ofertas#rebajas
🛰️Oferta publicada en Hogar
💥Enchufe Inteligente TP-Link TAPO P100
Automatiza tu hogar y ahorra energía con este enchufe inteligente compatible con
✅OFERTA: 8.99€
❌ Antes: 14.99€
💰Ahorras un 40%🔥
Programa el encendido y apagado de tus dispositivos, controla desde tu smartphon
👉 Simplifica tu vida con TP-Link TAPO P100
#rebajas#smartplug#ahorroenergetico#hogarinteligente#descuentos
🛰️Oferta publicada en Hogar
💥Bombillas LED inteligentes Tapo L530E
Ilumina tu hogar con colores vibrantes y control remoto
✅OFERTA: 14.99€
❌ Antes: 24.99€
💰Ahorras un 40%🔥
Ahorra energía, crea ambientes personalizados y controla desde tu smartphone
👉 Descubre la magia de la iluminación inteligente
#rebajas#hogarinteligente#bombillaled#alexaygooglehome#ofertas
🛰️Oferta publicada en Hogar
💥Base con batería Made for Amazon para Echo (4.ª generación) en Negro
Potencia tu hogar con la comodidad de tener tu Echo siempre encendido
✅OFERTA: 41.99€
❌ Antes: 59.99€
💰Ahorras un 30%🔥
Libertad de movimiento sin preocuparte por la carga, ideal para disfrutar de tu
👉 Hazte con la tuya antes de que se agoten
#rebajas#hogarinteligente#tecnologiaviral#bateriaparaecho#descuentos
🛰️Oferta publicada en Hogar
💥Detector de Movimiento Garza
Mantén tu hogar seguro en todo momento
✅OFERTA: 12.44€
❌ Antes: 16.4€
💰Ahorras un 24%🔥
Detección total en 360º para mayor protección
👉 Protege tu hogar ahora
#rebajas#detectordemovimiento#hogarinteligente#seguridadencasa#ofertas#descuentos#invierno#viral
🛰️Oferta publicada en Hogar
📉 ¡Lunes con descuentos del 70% y chocolate casi gratis!
Empezamos la semana con oportunidades brutales. Si buscas robot aspirador, el Lefant baja a 99€ (un 71% menos). También tenemos zapatillas "barefoot" de invierno por menos de 10€ y, para endulzar el día, galletas Milka por solo 0,50€. ¡Llena la despensa! 🍪🤖
👇 Selección del lunes:
🥾 Mishansha Barefoot Invierno por 9,9€ (-77% 🔥)
amzn.to/4rDWCLh
🎧 Sony Auriculares de Diadema ¡27€ con cupón!
amzn.to/4rEUC5M
🍪 Milka Choco Moo Galletas por 0,5€ (-72% 🔥)
amzn.to/3O2bvsx
🚿 Silla de Ducha para Personas Mayores por 42€ (-29% 🔥)
amzn.to/4tqgi7a
🏨 Hotel Juego de Mesa por 20,9€ (-30% 🔥)
amzn.to/4tF1Atk
🤖 LEFANT Robot Aspirador y Fregasuelos por 99€ (-71% 🔥)
amzn.to/4toqlK5
#HogarInteligente#Milka#Sony#JuegosDeMesa#Ahorro
🧹 ¡Miércoles de limpieza fácil y deporte!
Hoy Amazon rompe el mercado con dos ofertas estrella: el robot aspirador Conga por solo 99€ (¡menos de 100€ por olvidarte de barrer!) y las zapatillas Adidas Galaxy por 29,9€. También tenemos pack de tuppers a mitad de precio y descuento en Loctite para las pequeñas reparaciones. 🏠👟
👇 Selección del día:
🤖 Conga Robot Aspirador y Friegasuelos por 99€ (-54% 🔥)
amzn.to/4rwsnpI
👟 Adidas Galaxy 7 Zapatillas por 29,9€ (-45% 🔥)
amzn.to/4af4xaS
🍱 Amazon Basics 3 Tuppers por 6,6€ (-47% 🔥)
amzn.to/4qARuHf
🧴 2ª unidad al 50% en Productos Nivea
amzn.to/45MLiUX
🔧 Loctite Pack 3 Super Glue-3 por 4,8€ (-39% 🔥)
amzn.to/49Xbw9F
🏠 Zapatillas de Casa Espuma de Memoria por 14,9€ (-32% 🔥)
amzn.to/3ZetzCb
#HogarInteligente#Conga#Adidas#Nivea#Ahorro
💥iRobot Roomba 105 Combo
Haz que tu hogar brille esta Navidad
✅OFERTA: 122.18€
❌ Antes: 299.0€
💰Ahorras un 59%🔥
Aspira y friega de forma inteligente, evitando obstáculos y adaptándose a tu esp
👉 Simplifica tu vida con Roomba
#limpiezainteligente#robotaspirador#hogarinteligente#tecnologiainnovadora#descuentos#ofertas#navidad
🛰️Oferta publicada en Hogar
💥Freidora de aire Xiaomi Smart 6.5L
Cocina de forma saludable y deliciosa esta Navidad
✅OFERTA: 69.9€
❌ Antes: 129.99€
💰Ahorras un 46%🔥
Prepara tus platillos favoritos con menos aceite y más sabor
👉 Atrévete a probarla ahora
#freidoradeaire#cocinasaludable#recetas#navidad#ofertas#tecnologia#hogarinteligente#viral
🛰️Oferta publicada en Hogar
💥WiZ Enchufe Inteligente Tipo F
Automatiza tu hogar con facilidad
✅OFERTA: 8.0€
❌ Antes: 15.99€
💰Ahorras un 50%🔥
Controla tus dispositivos con comandos de voz y sin complicaciones
👉 Haz tu hogar más inteligente ahora
#rebajas#wizenchufe#enchufeinteligente#hogarinteligente#controlporvoz#instalacionfacil#ofertas#descuentos
🛰️Oferta publicada en Hogar
💥Termostato Wi-Fi Inteligente Garza Smart
Controla tu calefacción desde cualquier lugar
✅OFERTA: 69.92€
❌ Antes: 109.99€
💰Ahorras un 36%🔥
Ajuste personalizado, ahorro energético y comodidad en tu hogar
👉 Haz tu hogar más acogedor esta Navidad
#hogarinteligente#termostato#ahorroenergetico#controlporvoz#calderainteligente#navidad#ofertas#viral
🛰️Oferta publicada en Hogar