Установить свойства виджета в 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
🎃✨ ХЕЛЛОУИНСКИЙ РОЗЫГРЫШ #magicalpower! ✨🦇
Готова почувствовать себя настоящей ведьмочкой из Trix? 💜 В честь Хеллоуина мы приготовили 3 магических подарка 🧚♀️
Хочешь увеличить шансы? Приглашай друзей по реферальной ссылке, которую пришлёт бот! Каждый подписавшийся +1 шанс на победу! 🔮
💫 Разыгрываем три бокса из наборов: подарочный набор Sisters Power Gift Set и набор кистей Witch Essentials #magicalpower
👻 Как принять участие
1. Подписаться на канал @sodamakeup и не отписываться до окончания розыгрыша 🍂
2. Нажать кнопку "Участвовать" в конце поста 😶🌫️
Розыгрыш проводится на территории РФ.
🎃 Удачи всем феям и ведьмочкам ! 🌙
Участников: 1228
Призовых мест: 3
Дата розыгрыша: 18:00, 31.10.2025 MSK (завершён)
Победители розыгрыша:
1. Lillac - 46vopu
2. юля - 461i9i
3. ❤️ - 45tih7
Пришло время выбрать, на чьей ты стороне...
🌈 Нежность, яркость, очарование фей Винкс?
Познай магию дружбы и гори ярче звезд с Блум, Стеллой, Флорой, Музой, Текной и Лейлой!
⚡А может дерзость, загадка и темная эстетика Трикс?
Гипнотизируй, провоцируй и управляй вместе с Дарси, Сторми и Айси!
Какую бы бьюти-магию ты ни выбрала, главное, что ты с SODA — ведь только вместе мы сильны 💖
SODA x WINX: CHOOSE YOUR SIDE!
#magicalpower
🤩Нана Осаки одобряет! Твой рок-макияж с Soda 🤩
Эстетика Nana — это про страсть, музыку и бескомпромиссный стиль. Повтори фирменные черты Осаки Наны с нашими маст-хэвами:
🤩 Взгляд с характером: Кремовая подводка Miraculous, 301 или маркер S-CLASS, 201 regressor — плотный черный для глубокого, пронзительного взгляда.
🤩 Глубина цвета: Палетка Beware Of Witches #magicalpower даст нужные оттенки для создания фирменного smoky eye.
🤩 Губы: Нанеси вельветовую помаду Hypnotizing #magicalpower, 101 Riven для матового, драматичного эффекта.
🤩Детали: Добавь немного панка с металлическими заколками Fire Hearts!
Ready to rock? 🎸
#sodainspiration
А мы тут узнали, что ученые открыли новый цвет, Olo... И очень вдохновились! Он похож на Tiffany Blue и бирюзовый Pantone 15-5519, но по сравнению с Olo они менее насыщенные ❤️
Вне лаборатории его пока не увидеть, но мы на 99% уверены, что уже видели что-то похожее в коллекции SODA x WINX 🤔
#sodainspiration#magicalpower
А ведь мы еще не разыгрывали аксессуары из новой коллекции 👀 Пора это исправить!
Разыгрываем три бокса, в каждом будет три аксессуара, тинт и жидкие тени 💕
Как поучаствовать?
1. Подписаться на канал @sodamakeup и не отписываться от него до окончания розыгрыша ☀️
2. Нажать кнопку "Участвовать" в конце поста
😍
⚡ Кстати, если вы хотите повысить свои шансы на победу, то приглашайте друзей подписаться по реферальной ссылке, которую пришлет бот. Каждый подписавшийся по вашей ссылке это +1 шанс!
*Розыгрыш проводится на территории РФ.
💏 Результаты 26 апреля в 18:00 по мск, будет 3 победителя!
Всем удачи 💋
#sodateam#magicalpower
Участников: 2384
Призовых мест: 3
Дата розыгрыша: 18:00, 26.04.2025 MSK (завершён)
Победители розыгрыша:
1. Настя . - 2vutr5
2. Наталия Седельникова - 312m6e
3. пустота - 2vt2bk
Новая коллекция требует розыгрыша, согласны?
❤️
Разыгрываем три бокса, в каждом будет три(!) новых палетки, жидкий хайлайтер с Блум Dragon Flame, помада с Блум Fire Vortex и палетка для лица с Флорой Swirl Of Petals 😘
Как поучаствовать?
1. Подписаться на канал @sodamakeup и не отписываться от него до окончания розыгрыша 🌸
2. Нажать кнопку "Участвую" в конце поста 🐾
3. Проявлять активность 😇
⚡️ Кстати, если вы хотите повысить свои шансы на победу, то приглашайте друзей подписаться по реферальной ссылке, которую пришлет бот. Каждый подписавшийся по вашей ссылке это +1 шанс!
*Розыгрыш проводится на территории РФ.
🫦 Результаты 1 апреля в 18:00 по мск, будет 3 победителя!
Всем удачи 💋
#sodateam#magicalpower
Участников: 4243
Призовых мест: 3
Дата розыгрыша: 18:00, 01.04.2025 MSK (завершён)
Победители розыгрыша:
1. Мария - 2p9n8m
2. 𝒪𝓂𝑔 𝒳𝒟 #ℳℛ𝒦𝒮 #𝒮𝒲ℰℰℰ𝒢 #+ℛ𝒶𝓅 - 2p991c
3. Ефим Кондаков - 2pbe66
Ну вот, теперь все секреты раскрыты! Угадали цвета палетки? Уже думаете над образами, которые с ней можно создать? ☺️
Между нами, новая коллекция уже стоит в моно бутике Soda в Авиапарке и разъезжается по летуалям, так что ожидайте в своём городе 😉
#sodateam#magicalpower
Наконец-то и на улице весна, поэтому спешим доставать обе палетки с феечками для поиска всех-всех розовых оттенков: Heart of Alfea и Magical Dust 🌸
#magicalpower#sodatips
Зима вернулась на улицы только для того, чтобы мы показали макияж в стиле Айси новой палеткой Beware Of Witches❄️
Повторяем, пока снег лежит?
#magicalpower#sodatips