Установить свойства виджета в 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
😎
😎
😎
😎
😎
😎
😎
#aksiya
Qaynoq aksiya — naqd 9 xil mavsumiy mahsulotlarga🔥
Eng kerakli va ayni mavsumga mos mahsulotlar — endi yanada qulay narxlarda!
📅 8-9-10-aprel kunlari “Mittivoy”ning barcha filiallarda boʻlib oʻtadi
Faqat 3kun! Imkoniyatni qoʻldan boy bermang 🔥
📌Kitoblarga -50% chegirma kerakmi?
📍Manzilimiz📍Lokatsiya
🕘 9:00 dan 23:00 gacha
☎️ +998905116466
💵1% KESHBEK
📱Telegram📱Instagram📱YouTube📑Ishga kirish
#aksiya
✅Navbatdagi targ‘ibot aksiyasi Qoraqalpog‘iston Respublikasida o'tkazildi
Nukus shahridagi savdo majmualaridan birida bo‘lib o‘tgan “Mening solig‘im – yurtim iqboli” mavzusidagi aksiya nukusliklar xotirasida uzoq saqlanib qoladigan bo‘ldi.
Mazkur aksiya fuqarolar oʻrtasida soliq madaniyatini yuksaltirish va asosiysi, yashirin iqtisodiyotning oldini olishga qaratilganligi bilan ahamiyatlidir.
Savdo majmuasidagi gavjum muhit — har bir xarid, har bir chek, har bir so‘m kelajakka qo‘yilgan kichik, ammo ma’noli hissa ekani anglandi.
Ayrimlar uchun arzimasdek koʻringan xarid chekini talab qilishning ahamiyati, yashirin iqtisodiyot, xususan, savdo tushumlarini yashirish, soliqdan qochish va norasmiy bandlikning salbiy oqibatlari hamda xarid cheki uchun joriy qilingan keshbek, soliq imtiyozlari va yengilliklar, soliqlarning turlari va muddatlari xususidagi savollarga toʻgʻri javob bergan fuqarolarga Qoraqalpog‘iston Respublikasi soliq boshqarmasining maxsus sovgʻalari topshirildi.
Тelegram|Facebook|Youtube|Instagram|X|Threads
😎
😎
😎
😎
😎
😎
😎
#aksiya
“Mittivoy” 6 yoshda 🎊 Shu munosabat bilan oʻyinchoqlar boʻlimidan mega aksiya 🎈
📅 25-26-27-aprel kunlari “Mittivoy”ning barcha filiallarda boʻlib oʻtadi
Faqat 3 kun! Imkoniyatni qoʻldan boy bermang 🔥
📍Manzilimiz📍Lokatsiya
🕘 9:00 dan 23:00 gacha
☎️ +998905116466
💵1% KESHBEK
📱Telegram📱Instagram📱YouTube📑Ishga kirish
😎
😎
😎
😎
😎
😎
😎
#aksiya
“Mittivoy”ning 6 yilligi munosabati bilan super aksiya 😍
Eng kerakli va ayni mavsumga mos mahsulotlar — endi yanada qulay narxlarda!
📅 25-26-27-aprel kunlari “Mittivoy”ning barcha filiallarda boʻlib oʻtadi
Faqat 3 kun! Imkoniyatni qoʻldan boy bermang 🔥
📍Manzilimiz📍Lokatsiya
🕘 9:00 dan 23:00 gacha
☎️ +998905116466
💵1% KESHBEK
📱Telegram📱Instagram📱YouTube📑Ishga kirish
😎😎😎😎😎😎😎
#aksiya
1+1 aksiyaning 3-kuni! 🔥
Belgilangan vitrinadagi bahorgi ustki kiyimlar bilan tanishamiz ✅
Shoshiling! Bunday imkoniyatni qoʻldan boy bermang ‼️
📌1+1 aksiya bahorgi kiyimlarga
📍Manzilimiz📍Lokatsiya
🕘 9:00 dan 23:00 gacha
☎️ +998905116466
💵1% KESHBEK
📱Telegram📱Instagram📱YouTube📑Ishga kirish
😎😎😎😎😎😎😎
#aksiya
1+1 aksiyaning 3-kuni! 🔥
Chaqaloqlaringiz uchun belgilangan vitrinadagi bahorgi kiyimlar bilan tanishamiz ✅
Shoshiling! Bunday imkoniyatni qoʻldan boy bermang ‼️
📌1+1 aksiya bahorgi kiyimlarga
📌1+1 aksiya bahorgi kiyimlarga
📍Manzilimiz📍Lokatsiya
🕘 9:00 dan 23:00 gacha
☎️ +998905116466
💵1% KESHBEK
📱Telegram📱Instagram📱YouTube📑Ishga kirish
😎😎😎😎😎😎😎
#aksiya
1+1 aksiyaning oxirgi 4-kuni! 🔥
Belgilangan vitrinadagi bahorgi kiyimlar bilan tanishamiz ✅
Shoshiling! Bunday imkoniyatni qoʻldan boy bermang ‼️
📌1+1 aksiya bahorgi kiyimlarga
📍Manzilimiz📍Lokatsiya
🕘 9:00 dan 23:00 gacha
☎️ +998905116466
💵1% KESHBEK
📱Telegram📱Instagram📱YouTube📑Ishga kirish
😎
😎
😎
😎
😎
😎
😎
#aksiya
1+1 aksiyaning oxirgi 4-kuni! 🔥
Belgilangan vitrinadagi bahorgi oyoq kiyimlar bilan tanishamiz ✅
Shoshiling! Bunday imkoniyatni qoʻldan boy bermang ‼️
📌1+1 aksiya bahorgi kiyimlarga
📍Manzilimiz📍Lokatsiya
🕘 9:00 dan 23:00 gacha
☎️ +998905116466
💵1% KESHBEK
📱Telegram📱Instagram📱YouTube📑Ishga kirish
😎
😎
😎
😎
😎
😎
😎
#aksiya
Bitta oling, ikkinchisi bepul! 🔥
Belgilangan vitrinadagi bahorgi kiyim va oyoq kiyimlar uchun 1+1 aksiya ✅
Shoshiling, aksiyaning oxirgi 4-kunidan xarid qilishga ulguring 🔥
📌1+1 aksiya bahorgi kiyimlarga
📍Manzilimiz📍Lokatsiya
🕘 9:00 dan 23:00 gacha
☎️ +998905116466
💵1% KESHBEK
📱Telegram📱Instagram📱YouTube📑Ishga kirish