Установить свойства виджета в 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
💍 QRing 3 Pro — bu yangi avlod aqlli uzuk bo‘lib, sog‘liqni kuzatish uchun mo‘ljallangan
ℹ️ U bilan sensorli boshqaruv va LED bildirishnomalar orqali qulay foydalanish. Kaloriya sarfi, tana harorati, yurak urish tezligi, qon kislorod darajasi va qadamlar sonini kuzatish ham mumkin.
😴 Shuningdek, uyqu sifati va stress darajasini tahlil qilsa bo'ladi.
📲 Barcha ma'lumotlar Android va iOS uchun mo‘ljallangan maxsus ilovada saqlanadi. QRing 3 Pro narxi 99 AQSH dollari etib belgilangan.
➡️#salomatlik | Birinchi raqamli IT-Blog
🗿 Yangi elektron tatuirovkalar: sog‘liqni kuzatish uchun qulaylik
🤖 Elektron tatuirovkalar yurak urishi, tana harorati kabi ko‘rsatkichlarni kuzatadi va ma’lumotlarni simsiz smartfon yoki kompyuterga uzatadi.
📡 Ushbu texnologiya shifokorlarga bemorlarni masofadan nazorat qilishda yordam beradi va surunkali kasalliklarni kuzatishda qulaylik yaratadi.
💡 Tibbiyot sohasidagi ushbu inqilob kasalliklarni erta aniqlash va holatni doimiy monitoring qilish imkonini beradi.
Xullas, Cyberpunk yaqin...
➡️#salomatlik | Birinchi raqamli IT-Blog
Ko'zlarimizning do'st va dushmanlari bilan tanishamiz!
#salomatlik
ℹ️ Kompyuter bilan ishlashimiz davomida eng ko'p yuklama asosan ko'zlarimizga tushadi. Agar ko'zlarimizga to'g'ri parvarishni ko'rsatmasak sog'lig'imizga jiddiy zararlar keltirishi mumkin. Ushbu maqolada ko'zlarimizning 5 ta do'st va dushmanlari haqida ma'lumot berilgan.
📃Maqolani o'qish
💻 Kompyuterni birga o'rganamiz ⤵️
Telegram I YouTube I Insta I TikTok
Kompyuter "очки" lari foydalimi?
#salomatlik / Insta: Bek Olimjon
ℹ️ "Eng yaxshisi har 30-40 minutda monitorlardan uzoqroqqa borib, uzoqdagi manzillarga qarash orqali koʻzga dam berish foydaliroq" degandi bir doktor aka.
💻 Kompyuterni birga o'rganamiz ⤵️
Telegram I YouTube I Insta I TikTok
Kompyuterdan uzoq vaqt foydalanish qo‘l sog‘lig‘iga qanday taʼsir qiladi?
💪 Bilakda butun qo‘lni qon bilan taʼminlaydigan maxsus kanal mavjud. Ammo kompyuter qarshisida uzoq davom etadigan harakatlar natijasida ushbu kanaldagi zo‘riqish sezilarli darajada oshadi.
🔷 Bilakdagi kuchli stress tufayli asab shikastlanadi, bu esa barmoqlarning qattiq og‘rishi va ularda sezuvchanlikning pasayishiga olib keladi. Shifokorlar buni tunnel sindromi deb atashadi. Vaqt o‘tishi bilan og‘riq faqat kuchayadi va bartaraf qilish uchun uzoq vaqt tanaffus qilish talab qilinadi.
✅ Tunnel sindromining oldini olish uchun ish paytida qo‘llarning holatini kuzatish, tanaffus qilish, oyoq va qo‘llarni cho‘zib turish kerak.
👉Birinchi raqamli windows blog | #salomatlik
Ko'zlarimiz uchun mashqlar
#salomatlik / @soglomhayotuz
ℹ️ Ushbu mashqlarni har kuni muntazam takrorlab turish orqali ko‘z nuri o‘tkirligini tiklash mumkin. Videoda ko‘rsatilgan mashqlarning har birini 6-10 martadan bajarish kerak.
💻 Kompyuterni birga o'rganamiz ⤵️
TelegramIInstagramITikTokIYouTube