Установить свойства виджета в 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
Весь мир до сих пор ощущает ужасные последствия трагедии сбития самолета Malaysia Airlines, выполнявшего рейс #MH17 по маршруту Амстердам - Куала-Лумпур 🔟 лет назад. Сегодня посол Великобритании Найджел Кейси принял участие в памятном мероприятии, которое совместно организовали посольства Австралии и Нидерландов в Москве.
Читайте заявление министра иностранных дел Дэвида Лэмми ниже:
«В десятую годовщину сбития самолета авиакомпании Malaysia Airlines, пассажирского самолета, следовавшего рейсом MH17 Амстердам - Куала-Лумпур, мои мысли остаются с семьями и друзьями всех погибших. В тот день погибли 298 невинных людей, в том числе 10 граждан Великобритании, – все их мечты и амбиции на будущее были внезапно разрушены.
Десять лет с того ужасного дня тысячи людей по всему миру все еще ощущают разрушительные последствия этой трагедии, продолжая оплакивать своих близких. Я по-прежнему благодарен Совместной следственной группе за их усилия по установлению истины. Вынесение обвинительного приговора трем лицам, причастным к крушению MH17, стало важным шагом в обеспечении справедливости для семей погибших.
Все государства несут ответственность за всестороннее сотрудничество в усилиях по установлению ответственности, истины и справедливости для семей. Нас очень огорчает одностороннее решение Российской Федерации выйти из разбирательства Международной организации гражданской авиации (ИКАО) по MH17 и мы продолжаем призывать Россию в полной мере сотрудничать с усилиями установить подотчетность, чтобы правосудие могло быть полностью осуществлено».
https://t.me/posolstvoniderlandov
https://t.me/AusEmbMoscow
Правительство Великобритании 🇬🇧опубликовало заявление по итогам слушания Международной организации гражданской авиации (ИКАО), в котором #ICAO признала 🇷🇺 Россию ответственной за катастрофу рейса #MH17 в 2014 году.
⚡️12 мая 2025 года, впервые в истории, большинство государств-членов Совета ИКАО пришли к выводу, что Российская Федерация нарушила статью 3bis Чикагской конвенции, применив оружие против гражданского воздушного судна в полете, что привело к уничтожению рейса MH17 авиакомпании Malaysian Airlines в июле 2014 года.
⚡️Этим решением Совет ИКАО подтверждает приверженность соблюдению Конвенции о международной гражданской авиации и формулирует важные ожидания в отношении обязательств государств по обеспечению безопасности воздушного пространства. Кроме того, оно подчеркивает, что нарушители правил, установленных данной Конвенцией, будут привлечены к ответственности.
⚡️Наиболее важно то, что это решение способствует восстановлению справедливости для семей 298 погибших в результате крушения рейса MH17, включая 10 граждан Великобритании, 17 июля 2014 года. Это также является ярким напоминанием о безрассудном и опасном поведении российских властей и ее бесчеловечном пренебрежении к жизням мирных граждан.
⚡️Это первый случай за 80-летнюю историю ИКАО, когда Совет принял решение по существу международного правового спора в рамках организации. Великобритания приветствует четкое лидерство, проявленное ИКАО, чтобы обеспечить всестороннее и прозрачное рассмотрение дела. Великобритания остается приверженной поддержке ИКАО в ее усилиях по соблюдению международного права и обеспечению безопасности и надежности воздушного пространства.
Напоминаем, что Российская Федерация является членом ИКАО с 14 ноября 1970 г. с учетом правопреемственности России с 26 декабря 1991 г. членства в ИКАО Союза Советских Социалистических Республик.
🔗https://www.gov.uk/government/news/mh17-international-civil-aviation-organisation-vote.ru
#Russia_is_terrorist#Ukraine#Украина#Россия#Russia#война#СВО#армия#Путин#Трамп#Trump#президент#русскиймир#мобилизация#призыв#Нидерланды#Boeing#MH17
Только у меня - редчайшие документы и документальная хроника
#ЕСПЧ ПРИЗНАЛ ВИНУ РОССИИ В АТАКЕ НА BOEING MH17
Они ЗНАЛИ, что стреляют по гражданскому мирному пассажирскому самолёту
Малазийский Боинг над Украиной в 2014 году сбила зенитная система российской армии! Именно к такому выводу пришла международная следственная группа, которая изучает трагедию.
.
Почему игнорируются материалы и выводы следователей из России?
Почему не допрашиваются украинские диспетчеры и военнослужащие частей ПВО Украины?
Почему летчик Волошин, которого поначалу обвиняли в уничтожении лайнера, покончил с собой?
Почему не было закрыто воздушное пространство над зоной конфликта?
Этих «почему?» можно задать еще очень много.
.
Но вопрос «зачем?» гораздо важнее. Это «расследование» изначально было озабочено не поиском виновных, а подгонкой фактов под удобный вывод.
.
А вот трагедии Одесского дома профсоюзов, бомбардировки мирных городов Донбасса, убийства журналистов на Украине, и кто убил «Небесную сотню» – это все в Европе вообще никого не волнует.
Правда все равно вскроется!
.
#Боинг#MH17#малайзийскийбоинг#бук#небеснаясотня#одессапомнит#волошин#ложь#предвзятость