Установить свойства виджета в 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
#Ro‘yxatga_olish_2026
Ish joyida ro‘yxatdan o‘tish mumkinmi?
O‘zbekiston Respublikasi Prezidentining 2025 yil 19 sentyabrdagi “O‘zbekiston Respublikasida aholi va qishloq xo‘jaligini ro‘yxatga olish tadbirini o‘tkazish to‘g‘risida”gi PF-173 son farmonida davlat organlari va tashkilotlari 2026 yil 15 yanvardan 31 yanvarga qadar o‘z tizimida faoliyat yuritayotgan barcha xodimlarning census.stat.uz portalida ro‘yxatdan o‘tishini ta’minlashi belgilangan.
✅ Ro‘yxatga olish jarayoni 2 bosqichda tashkil etiladi.
👉Batafsil
👇Bizni kuzating:
🌐web-sayt | 📷instagram | 👉telegram | ▶️youtube | 💬facebook
В России стало на две социальные сети меньше, но появилась отличная альтернатива — новая соцсеть ro:, в которой вы помогаете благотворительности просмотрами рекламы.
«Константа» стала одним из дружественных благотворительных фондов новой соцсети!
ro: это сообщество эмпатичных людей, которым важно менять мир к лучшему. Присоединяйтесь к бета-версии социальной сети по инвайт-ссылке от нашего фонда: https://links.ro.charity/link/av
Заходите посмотреть и cделать мир добрее в эти непростые времена.
#ФондКонтстанта#ro: #Поможем!
🇯🇵RO — стильная Азия с видом на Мойку
Ресторан с современной азиатской кухней, где дизайн и кухня работают в тандеме. Интерьер построен на сочетании дерева и панорамных окон, а японская роспись на стене добавляет месту характер и глубину.
Что стоит попробовать:
🥦Кушияки с брокколи — невероятно нежные в фирменном соусе
🍜Лапша с лососем — большая порция, которая отлично насыщает
🍹Авторские коктейли от шеф-бармена — с использованием напитков и трав Азии
📍 наб. реки Мойки, 44 (м. Адмиралтейская)
🕐 Ежедневно: 10:00–23:00
💳 Средний чек: 1800 ₽ (без напитков)
🔗 Подробнее на сайте: https://rorestaurant.ru/
#азиатскаякухня#адмиралтейская#кудасходитьвпитере#ro
Твоя ежедневная афиша: концерты, выставки, прогулки и не только — в Куда сходить в Санкт-Петербурге.
🌍ADCYOUTH SUMMIT 2025 🚀
Siz yilning eng yirik yoshlar anjumaniga tayyormisiz? 🔥ADC YOUTH SUMMIT 2025 – bu o‘z g‘oyalaringizni namoyon qilish, jamoa bilan ishlash va kelajakni o‘zgartirishga tayyor bo‘lgan tengdoshlaringiz bilan uchrashish imkoniyati!
💡Sizni nimalar kutmoqda?
✅ Jamoaviy ishlash bo‘yicha bebaho tajriba
✅ Liderlik va strategik fikrlash ko‘nikmalarini oshirish
✅ Yangi tanishuvlar va foydali aloqalar
✅ Katta o‘zgarishlarga ilk qadam qo‘yish imkoniyati!
⏳Jamoalarni ro‘yxatdan o‘tkazishning oxirgi muddati – 2025-yil 10-mart!
Orqaga surmang – jamoangizni yig‘ing va hoziroq ro‘yxatdan o‘ting!
📌Dunyo o‘zgarishini boshlaydiganlardan bo‘ling!
🔗Ro‘yxatdan o‘tish uchun: 742261078 (Telegram: @admofadc)
📱Telegram | 📱Instagram | 📱Facebook | 📱TikTok | 📱YouTube | 📱Website
#ADCYouthSummit2025#Yoshlar#Liderlik#Ilhom#Ro‘yxatdanO‘tishBoshlandi