Установить свойства виджета в 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
#XiaomiPad6 da sur’atlaringizga osonlikcha qayta ishlov bera olasiz
Planshetda qayerda bo’lishingizdan qat’iy nazar ishlashingiz va ijod qilishingiz uchun kerak bo’lgan barcha imkoniyatlar mavjud 😌
.
.
На #XiaomiPad6 можно с лёгкостью обрабатывать фотографии
В планшете есть все необходимое для работы и творчества, где бы вы не находились😌
Zamonaviy, shunday emasmi?
Unumdorlik dizaynga mos kelganda - bu kombinatsiya hayotda ideal tanlovga aylanadi
Istalgan vaqtda va istalgan joyda Xiaomi Pad 6 bilan kuningizni boshlang !
.
.
Стильно, не правда ли?
Когда производительность встречается с дизайном - это сочетание становится идеальным выбором в жизни
В любое время и где угодно начните свой день с Xiaomi Pad 6 !
#xiaomipad6
Xiaomi Pad 6-bu nafis korpusi va o'ziga xos xususiyatlari bilan, tezda ko'zni qamashtiradigan planshet!
✨Ajoyib displey: Asosiy e'tibor bu g’aroyib 11 dyuymli yuqori aniqlikdagi displey, chiroyli 10 bitli rang chuqurligi va ajoyib 144 Gts yangilanish tezligi.
✨Fazoviy tovush: Dolby Atmos texnologiyasiga ega to'rtta karnay/dinamik filmlar, musiqa yoki o'yinlar bo'lsin, sizni eng yuqori sifatli tovushlar bilan o'rab turgan ajoyib audio tajribani taqdim etadi.
✨Elegant dizayn: Xiaomi Pad 6-ning zamonaviy korpusi sizning shaxsiyatingizni ta'kidlab, uni nafaqat funktsional qurilma, balki zamonaviy aksessuarga aylantiradi.
Xiaomi Pad 6 - sifat farqini his eting va barcha imtiyozlardan bahramand bo'ling !
.
.
Xiaomi Pad 6 - планшет, который сразу захватывает взгляд своим элегантным корпусом и уникальными характеристиками!
✨Великолепный дисплей: Основной акцент - это впечатляющий 11-дюймовый дисплей с высоким разрешением, прекрасной 10-битной глубиной цвета и невероятной частотой обновления 144 Гц.
✨Пространственный звук: Четыре динамика с технологией Dolby Atmos обеспечивают потрясающий аудио-опыт, который окружает вас звуками высочайшего качества, будь то фильмы, музыка или игры.
✨Элегантный дизайн: Стильный корпус Xiaomi Pad 6 подчеркивает вашу индивидуальность, делая его не только функциональным устройством, но и стильным аксессуаром.
Xiaomi Pad 6 - ощутите разницу в качестве и наслаждайтесь всеми преимуществами ! 💻🎨🔊#XiaomiPad6
Yangi Xiaomi Pad 6 o'zining nozik qirralari va "ko'zni himoya qilish"👀 funksiyasiga ega 144hz yangilanish tezligi tufayli foydalanish uchun juda qulay
Bu sizga bitta zaryad bilan taxminan 16 soat davomida videoni ijro etish imkonini beradi, ammo agar zaryad olayotgan bo'lsa, planshet 33 Vt tez zaryadlash bilan jihozlangan. !⚡️
Siz esa planshetlardan nima uchun foydalanasiz?
.
.
.
Новый Xiaomi Pad 6 очень удобный в использовании благодаря его тонким рамкам и частотой обновления 144Гц с дополнительной функцией «защита глаз» 👀
Он позволяет воспроизводить видео около 16 часов без подзаряди, ну а если же зарядка села планшет оснащен быстрой зарядкой в 33вТ. !⚡️
А для чего бы вы использовали планшеты?
#XiaomiPad6
#XiaomiPad6 - hayotning har bir sohasidagi homkoringiz🌟
🎓 Ish yoki o'qish, siz u bilan
doim faollikning yuqori cho'qqisida bo'lasiz.
➖➖➖➖➖➖➖➖➖
Верный спутник во всех сферах жизни - #XiaomiPad6🌟
🎓 От работы до учебы, с ним вы всегда на пике производительности
To'liq tugmachalar, yumshoq va qulay bosish - maksimal samaradorlik uchun zarur bo'lgan barcha imkoniyatlar. 🎯
Xiaomi Pad 6 bilan kelajakingizga yo'l oching - shaxsiyatingizni aks ettiradigan va sizni yangi cho'qqilarga ilhomlantiradigan uslubingiz va dizaynni tanlang.🏃♀️
➖➖➖➖➖➖➖➖➖
Полноценные клавиши, мягкое и комфортное нажатие – все, что нужно для максимальной продуктивности. 🎯
Откройте для себя путь в будущее с Xiaomi Pad 6 - выберите стиль и дизайн, которые будут отражать вашу личность и вдохновлять вас на новые высоты.🏃♀️
#XiaomiPad6
#XiaomiPad6 - ish va ijodda sodiq do'stingiz bilan, samaralikni keyingi bosqichga olib chiqing. 🚀
➖➖➖➖➖➖➖➖➖
Поднимите продуктивность на новый уровень с помощью #XiaomiPad6 - вашего верного союзника в работе и творчестве. 🚀
Bizni ajoyib yangilik kutmoqda: yangi Xiaomi Pad 6 planshetini unboxingi!
Xiaomi Pad 6 haqida ko'proq malumot bilmoqchimisiz? Unda post ostida 🔥 qoldiring
➖➖➖➖➖➖➖➖➖
Великое открытие ждет нас: распаковка нового планшета Xiaomi Pad 6!
Хотите узнать больше о Xiaomi Pad 6?Тогда оставляйте 🔥 под постом
#unboxing#XiaomiPad6