Установить свойства виджета в 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
На платформе ОККО выложили короткометражные фильмы командных соревнований ArtMasters 2021-2023, которые традиционно проводятся совместно с нашим незаменимым партнёром Таврида-Арт.
Все фильмы были произведены командами из числа финалистов в короткие сроки, при равном бюджете и при наставничестве партнёров.
Среди фильмов есть и мои любимые:
https://okko.tv/serial/korotkie-metry
На связи,
ББВ
#okko
😀 Okko x 🏆 Team Spirit
Объявляем об официальном партнерстве с одной из самых популярных и титулованных киберспортивных команд – 🏆 Team Spirit.
В сервисе Okko появится эксклюзивный контент о команде: влоги и закулисные видео, прямые включения с мероприятий, интервью и другой уникальный контент.
Команда Okko с большим вдохновением следит за успехами Team Spirit и верит, что вместе мы сможем сделать киберспорт лучше и ближе к зрителю!
#Okko#TeamSpirit
⚡Start и Okko выпускают сериал «Молот ведьм» с черновым звуком
Сел смотреть сегодняшние свежие серии сериала «Молот ведьм». По субботам по 2 новых серии выходят на Start и Okko. Включая третью серию проекта и диву даюсь тому, что герои в диалогах говорят разными голосами. Так происходит только потому, что явно использован черновой звук.
Видимо на Start и Okko никто профессионально не отсматривает серии перед размещением.
Крайне удивлён тому, что к дорогостоящему фэнтези-сериалу, созданному при поддержке Института развития интернета и автором идеи которого является Алексей Троцюк, — такое халатное отношение.
Start / @start_shows, Okko / @okkomovies, давайте исправляйтесь!
Видео: Start, Okko.
@ehserial
#start#okko#ири
Александр Ревва, Владислав Ветров, Эвелина Бледанс и другие звезды на премьере фантастического фильма «Ждун 2». #Ждун2#Нашекино#Okkohttps://www.rabotnikitv.com/2026/04/27/aleksandr-revva-vladislav-vetrov-jevelina-bledans-i-drugie-zvezdy-na-premere-fantasticheskogo-filma-zhdun-2/
Ждун томится в ожидании Сергея Жукова в клипе саундтрека комедии «Ждун 2». #Нашекино#Okko#Ждун2https://www.rabotnikitv.com/2026/04/21/zhdun-tomitsja-v-ozhidanii-sergeja-zhukova-v-klipe-saundtreka-komedii-zhdun-2/
УЖЕ В OKKO: ПОЛИТИЧЕСКИЙ ДЕТЕКТИВ «БЕРЛИН’23» ― СИКВЕЛ «ВАРШАВЫ’21». #OKKO#киностудияМедведь#БЕРЛИН23https://www.rabotnikitv.com/2026/04/29/uzhe-v-okko-politicheskij-detektiv-berlin-23-sikvel-varshavy-21/
НОВЫЙ ДЕТЕКТИВНЫЙ ТРИЛЛЕР О ПОСЛЕДОВАТЕЛЯХ ЧИКАТИЛО. «СЛЕД ЧИКАТИЛО» ВЫЙДЕТ В OKKO 21 МАЯ. #СЛЕДЧИКАТИЛО#OKKO#кинокомпанияБратьевАндреасянhttps://www.rabotnikitv.com/2026/04/28/novyj-detektivnyj-triller-o-posledovateljah-chikatilo-sled-chikatilo-vyjdet-v-okko-21-maja/
«СТАРЫЙ ОРЕЛ». Кадры и дата проката лирической комедии. #Старыйорел#MEMCinemaProduction#Okko#ЦентралПартнершипhttps://www.rabotnikitv.com/2026/04/17/staryj-orel-kadry-i-data-prokata-liricheskoj-komedii/
ДОБРО ПОЖАЛОВАТЬ В МИР УРАЛЬСКИХ ЛЕГЕНД. #МАЛАХИТ#Okko#OriginalsProduction#NORMPRODUCTIONhttps://www.rabotnikitv.com/2026/04/20/dobro-pozhalovat-v-mir-uralskih-legend/
УРОК ПО СПАСЕНИЮ ЧЕЛОВЕЧЕСТВА. НОВЫЙ ФАНТАСТИЧЕСКИЙ СЕРИАЛ «РАДАР» УЖЕ В OKKO. #РАДАР#OriginalsProduction#MEMCinemaProductiоn#OKKOhttps://www.rabotnikitv.com/2026/04/24/urok-po-spaseniju-chelovechestva-novyj-fantasticheskij-serial-radar-uzhe-v-okko/