Установить свойства виджета в 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
🎉 Пополнение в команде! 🛴
🧩 Нового райдера мы приняли сразу в основной состав! 🚀
Попробуйте угадать, кто это? Напишите свои варианты в комментариях! 👇
Интрига раскроется в начале следующей недели!
#TechTeamPro🛴
Команда TechTeam Pro продолжает укреплять свой состав. К нам присоединяется талантливый райдер из Кемерово — Саша Паршуков, широко известный под ником 📱s_mechanic15.
Добро пожаловать в команду!
#TechTeamPro#s_mechanic15#Kemerovo
Отличные новости! 🛴😎
У нас пополнение среди стритеров! Встречайте — Николаенко Иван из солнечного Краснодара!
Иван крутой райдер, чей уникальный стиль и бесстрашие уже успели вдохновить многих.
Мы рады объявить, что теперь Иван будет выступать при поддержке нашей команды и бренда!
Добро пожаловать в команду!
📱 zrrachokk
📱https://t.me/zrrach
#Street#TechTeamPro#НовыйРайдер
Команда TechTeam Pro продолжает укреплять свой состав. К нам присоединяется талантливый райдер из Кемерово — Саша Паршуков, широко известный под ником 📱s_mechanic15.
Добро пожаловать в команду!
#TechTeamPro#s_mechanic15#Kemerovo
Отличные новости! 🛴😎
У нас пополнение среди стритеров! Встречайте — Николаенко Иван из солнечного Краснодара!
Иван крутой райдер, чей уникальный стиль и бесстрашие уже успели вдохновить многих.
Мы рады объявить, что теперь Иван будет выступать при поддержке нашей команды и бренда!
Добро пожаловать в команду!
📱 zrrachokk
📱https://t.me/zrrach
#Street#TechTeamPro#НовыйРайдер
Продолжаем искать и находить таланты! ✨ Приветствуем нового райдера нашей команды — Георгия Стариченко! 🎉
В свои 10 лет Георгий демонстрирует недетскую технику и целеустремленность. 💪 Мы рады предоставить ему свою поддержку для дальнейшего роста. 📈
Добро пожаловать в TechTeam!🔥
Подписка - 📱https://www.instagram.com/georgiistarichenko/
#TechTeamPro#НовыйРайдер#ГеоргийСтариченко
⚡️ Максим Лаллав — 4-й в мире!
Наш райдер отлично выступил на первом чемпионате мира по адаптивному скейтбордингу в Сан-Паулу (Бразилия).
Остановившись в шаге от тройки призеров, Макс показал по-настоящему мировой уровень.
Поздравляем Макса! 🛹💪
#TechTeamPro#АдаптивныйСкейтбординг#МаксимЛаллав#Бразилия
Внимание, вопрос! 🤔 Что делает ваш любимый админ в воскресенье на площадке RCC?
Верно! Прямо в эту минуту он проводит мастер-класс для райдеров Екатеринбурга!
#RCCЕкатеринбург#МастерКласс#RCC#TechteamPro
🎥 Вышло горячее видео! Обратная сторона ЧМ от Вовы Алехина.
Что на самом деле чувствует спортсмен, ворвавшийся в топ-15 сильнейших юниоров планеты? 🌍🏆
Нервы, адреналин, закулисье самого масштабного старта — все это в новом честном влоге от Вовы Алехина с Чемпионата Мира в Японии! 🇯🇵
Это не просто репортаж. Это история большого шага к будущим победам. Для нас — гордость, для него — путь. 💪
👉 Смотрите по ссылке
📱https://youtu.be/NNMfqQ3ENVU !
#techteampro#путькпобеде#чемпионатмира#юниоры
🤝 НАШ БАЯН ТЕПЕРЬ В ОСНОВЕ!
Екатеринбург всегда славился характером, и Дима "Баян" Барков — яркое тому подтверждение.
Сегодня мы с радостью объявляем о его переводе в ОСНОВНОЙ СОСТАВ TechTeamPro. 🛴💙
Ставь ❤️ если рад за Диму!
#Баян#Екатеринбург#TechTeamPro#ОсновнойСостав
🚀КОНКУРС! РАЗЫГРЫВАЕМ ДЕКУ BULLET! 🚀
Наши райдеры не перестают радовать победами!
В честь этого мы запускаем конкурс и даём шанс выиграть нашу новую деку «Bullet» («Пуля»)!
Участвовать проще простого:
Быть подписанным на наш канал @TechTeamPRO и канал чемпиона Владимира Алехина @yeahve.
Нажать кнопку «Участвовать» под этим постом.
➡️ Итоги подведём в 11.00 24 сентября. Победителя объявим здесь же, в канале!
Удачи всем! ✨
#TechTeamPRO#Конкурс#ДекаBullet#Подарок
Участников: 836
Призовых мест: 1
Дата розыгрыша: 11:00, 24.09.2025 MSK (завершён)
Победители розыгрыша:
1. Туман - 3v54lv
🔥 МАКС НА ВЗЛЕТ!
Наш Макс официально в пути! 🛬
Прямо сейчас он вылетает в Бразилию, где примет участие в Чемпионате мира.
Болеем и ждем вестей с другого конца света. Погнали! 💪🛹
#TechTeamPro#МаксНаВылете#ЧМ2026#БразилияЖди