Установить свойства виджета в 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
УЖЕ ЗАВТРА! 9 ЯНВАРЯ 2026 года
МЫТИЩИ!
SHERWOOD PUB ПРЕДСТАВЛЯЕТ
ЧЁРНЫЙ ОБЕЛИСК + ПАСАШ | Двойной концерт!
Билеты:vk.cc/cMwBwM
Сначала — Пасаш: драйв, свежесть, дебютный альбом, который вы услышите первыми.
Потом — Чёрный Обелиск: «The Best – Все хиты», легендарные треки, которые поют вместе с ним тысячи.
Ограниченные билеты уже в продаже.
Не упусти шанс стать частью истории.
НАЧИНАЕМ В 20:00!
#черныйобелиск#пасаш#рокмузыка#sherwood#мытищи
SHERWOOD PUB ПРЕДСТАВЛЯЕТ
ЧЁРНЫЙ ОБЕЛИСК + ПАСАШ | Двойной концерт!
Билеты:vk.cc/cMwBwM
9 января, 2026 г. клуб Sherwood, Мытищи — вечер, который взорвёт ваши сердца!
Сначала — Пасаш: драйв, свежесть, дебютный альбом, который вы услышите первыми.
Потом — Чёрный Обелиск: «The Best – Все хиты», легендарные треки, которые поют вместе с ним тысячи.
Ограниченные билеты уже в продаже.
Не упусти шанс стать частью истории.
НАЧИНАЕМ В 20:00!
#черныйобелиск#пасаш#рокмузыка#sherwood#мытищи
SHERWOOD PUB ПРЕДСТАВЛЯЕТЧЁРНЫЙ ОБЕЛИСК + ПАСАШ | Двойной концерт!
Билеты:vk.cc/cMwBwM
9 января, клуб Sherwood, Мытищи — вечер, который взорвёт ваши сердца!
Сначала — Пасаш: драйв, свежесть, дебютный альбом, который вы услышите первыми.
Потом — Чёрный Обелиск: «The Best – Все хиты», легендарные треки, которые поют вместе с ним тысячи.
Ограниченные билеты уже в продаже.
Не упусти шанс стать частью истории.
#черныйобелиск#пасаш#рокмузыка#sherwood#мытищи
Почему стоит поехать отдыхать в отель Sherwood Exclusive Kemer с детьми?👶
1❤️ Большой детский клуб с воспитателями, который работает до полуночи!👍 Помимо детской площадки и лабиринта, для детей проводятся творческие мастер-классы, есть компьютерный зал с play station и музыкальный кабинет.🎮🎶
2❤️ Огромный аквапарк с зоной для малышей и горками для детей постарше.🛝
3❤️ Множество бассейнов, в том числе детские бассейны и бассейн с плавным входом. 🏊♂️
4❤️ Предусмотрен детский стол и диетический стол в основном ресторане шведской линии, малышам приносят детские стулья с нагрудниками, а также дети могут полакомиться в специальных кафе мороженым с разными вкусами и вафлями с топпингом.🍩 В ресторанах аля-карт есть детское меню.🍝
5❤️ Ежедневная детская анимационная программа, а также проходят мини диско и детские шоу. Например, детки посмотрели интересное шоу с попугаями.🎉🦜
#турция#анталия#кемер#antalya#kemer#turkey#travel#sherwood#sherwoodkemer#sherwoodexclusivekemer#отелитурции
AI Boom Primarily Seen in USA
Recent analysis indicates a surge in data center construction in the USA, forecasted to reach 4,750 in 2024, surpassing this year's record of 4,250. Data from Apollo suggests the US has more data centers than the next top nine countries combined, leading researchers to conclude a lack of AI expansion in other developed nations. However, the situation in China appears different, with reports of 230 million generative AI users and 130 new language models launched, representing 40% of the world total. The inconsistency raises questions about the global AI landscape.
For further insights, read more in the full articles here: Sherwood Insight, Apollo Report, Russian Data Center Research, Reuters Article.
#AI#DataCenters#USA#China#Investment#Tech#Statistics#GenerativeAI#MarketTrends#Apollo#Sherwood#Research#Economics#Infrastructure#DigitalTransformation#TechGrowth#LanguageModels#GlobalAI