Установить свойства виджета в 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
💢Cyberattaque contre Aeroflot
La principale compagnie aérienne russe, #Aeroflot, a subi une cyberattaque. Un coup porté au moment où les forces armées ukrainiennes adoptent un changement de tactique et se donnent pour objectif de perturber le bon déroulement des aéroports civils russes. Les détails avec Igor Kourachenko qui s'est rendu sur place.
RT en français • Osez questionner !
Делимся прекрасными обоями с прекрасным самолётом 👆
____________
И это только первая часть
🤫
Без сжатия в комментариях ниже под постом
Лёгкое небо | Донат
#aviation#Aeroflot#A350
Ливрея в стиле ретро — это целая история. Сегодня на солнечном перроне "Гагарина" самолет А320 авиакомпании "Аэрофлот" в ретро-ливрее "Добролёт" в честь акционерного общества добровольного воздушного флота, учрежденного 17 марта 1923 года.
#gsv#Аэрофлот#Aeroflot
✈️
Подписывайтесь на новости аэропорта "Гагарин"!
Читайте нас в MAX
✈️ Лучшая авиакомпания страны?
📌Как часто летаете Аэрофлотом?
✈️ - 5 раз в месяц и чаще
✈️ - 2-4 раза в месяц
✈️ - 1-2 раза в месяц
🔥 - Лишь раз в сезон
🛫 - Раз в год
🫡 - Ни разу не летал
👨✈️ - Работаю в авиакомпании
Лёгкое небо
#aviation#Aeroflot#Аэрофлот#опрос
До редакции нашего канала дошла секретная информация 🔥
Совсем скоро Аэрофлот планирует совершить масштабный заказ на 15 самолётов A380, планируемая дата покупки - 30 февраля ❤️
Следим за новостями!
Лёгкое небо
#A380#aviation#Aeroflot#Аэрофлот
✈️Аэрофлот» — российская государственно-частная авиакомпания, полное наименование — публичное акционерное общество «Аэрофлот — российские авиалинии» (ПАО «Аэрофлот»)
⏺Основана 17 марта 1923 года
⏺С апреля 2006 года входил в состав авиационного альянса SkyTeam, с 30 апреля 2022 года членство временно приостановлено.
⏺Вместе с дочерними авиакомпаниями «Россия» и «Победа» образует авиационный холдинг «Группа „Аэрофлот“», который входит в число двадцати ведущих авиаперевозчиков мира по пассажиропотоку.
⏺Выполняет внутренние и международные рейсы из московского аэропорта Шереметьево и аэропорта Красноярск.
⏺По состоянию на декабрь 2025 года парк авиакомпании «Аэрофлот» насчитывает 171 самолёт, из которых 41 — широкофюзеляжный, 130 — узкофюзеляжные среднемагистральные.
B777 — 22;
B737 — 37;
A350 — 7;
A330 — 12;
A321/А321NХ — 35;
A320/А320NEO — 58.
🧳В период до 2030 года «Аэрофлот» планирует получить 210 самолётов МС-21, 89 самолётов SJ-100 и 40 Ту-214.
🌏 По данным на Декабрь 2025 года, «Аэрофлот» напрямую выполняет рейсы по 151 направлению, а вся группа компаний «Аэрофлот» (включая «Россию» и «Победу») — примерно по 292 направлениям из аэропорта Шереметьево.
Легкое Небо
#аэрофлот#aeroflot#russia#airlines
«Детская любовь к самолетам», 70х100см, холст, масло, Doping Pong, 2023
Аукцион VLADEY RUSSIA
Живые торги в зале!
Участие онлайн и по телефону
Трансляция на сайте
4 июля в 20:00
Предаукционная выставка: 23 июня — 4 июля
C 11:00 До 22:00, без выходных
VLADEY
Неглинная, 14 стр. 1А, вход 4
More info: Лот 62
https://vladey.net/ru/lot/10768
#dopingpong#ussr#retro#aeroflot#childhood#love#airplane#pulkovo#oiloncanvas