Установить свойства виджета в 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
⛷ Друзья! Мы всей командой BELSTAR, благодарим Вас за участие на "MinSki Cup 2022" на минувших выходных!
🤳 Не будем затягивать! Фотоотчет, итоговые протоколы и очень просящая вашего отзыва форма уже в нашем таплинк по ссылке
🤝 Надеемся что вам всё понравилось! Спасибо за участие и ждем вас на наших стартах!
🚴♂️ Напоминаем вам об открытой регистрации на Минский Триатлон 2022 - 31 июля, регистрация открыта по ссылке
——————————————
BELSTAR - Организатор самых крупных спортивных мероприятий в Беларуси, таких как: #belstarBiathlon#belStarMinSkiCup#belstarMinskMarathon#belstarMinskTriathlon#belstarCycling#belstarChristmas
31 июля 2022 г. пройдет самое крупное спортивное событие года в Беларуси!
Ты можешь стать участником #MINSKTRIATHLON2022, проверить свои возможности и влюбиться в спорт навсегда!
Уже скоро мы начнем знакомить тебя с подробностями соревнований, расскажем о самых важных и интересных моментах, а так же вместе познакомимся с историей триатлона.
Слоты на Минский Триатлон 2022 уже доступны на нашем сайте: https://minsktriathlon.by
Регистрируйся и становись частью лучшего приключения этого лета!
Всю актуальную информацию вы можете найти на нашем сайте:
▪️Полный Racebook старта
▪️Все дистанции и схемы гонки
▪️Классный чат в Telegram
▪️Стать партнером нашего мероприятия
BELSTAR - Организатор самых крупных спортивных мероприятий в Беларуси, таких как: #belstarBiathlon#belStarMinSkiCup#belstarMinskMarathon#belstarMinskTriathlon#belstarCycling#belstarChristmas#minsktriathlon2022
Сегодня всемирный праздник у самого популярного вида спорта - бега.
Для многих бег - это стиль жизни. Всей командой поздравляем всех причастных к этому виду спорта и будем рады увидеться 31 июля на #MINSKTRIATHLON2022 не только на дисциплинах триатлона, а также на дистанциях забега для девушек и детей!
Регистрируйся по ссылке и участвуй в самом масштабном спортивном событии этого лета!
#belstarBiathlon#belStarMinSkiCup#belstarMinskMarathon#belstarMinskTriathlon#belstarCycling#belstarChristmas#minsktriathlon2022
#belstar#белстар#триатлон#плавание#бег#спорт#велоспорт#биатлон#марафон#минск
До старта #MINSKTRIATHLON2022 остается все меньше времени, а это значит что твоя подготовка в самом разгаре 🔥
Отмечай нас в сторис на тренировках, вдохновляй других участников соревнования, а самые интересные снимки с подготовкой мы обязательно разместим у себя в профиле и покажем, как нужно готовится к самому масштабному старту года!
Напоминаем, что мест для участия остается с каждым днём все меньше. Успей зарегистрироваться по ссылке!
И до встречи на старте! 😉
#belstarBiathlon#belStarMinSkiCup#belstarMinskMarathon#belstarMinskTriathlon#belstarCycling#belstarChristmas#minsktriathlon2022
#belstar#белстар#триатлон#плавание#бег#спорт#велоспорт#биатлон#марафон#минск#беларусь#спорт
До старта #MINSKTRIATHLON2022 остался 1 месяц!
Мы надеемся, что ты вовсю уже готовишься и покажешь себя на старте 31 июля, ведь в этот день состоится самый масштабный спортивный праздник в Беларуси.
Где у тебя есть уникальная возможность заявить о себе!
Переходи по ссылке и регистрируйся на наши дистанции!
До встречи 31 июля на #MINSKTRIATHLON2022
#belstarBiathlon#belStarMinSkiCup#belstarMinskMarathon#belstarMinskTriathlon#belstarCycling#belstarChristmas#minsktriathlon2022
#belstar#белстар#триатлон#плавание#бег#спорт#велоспорт#биатлон#марафон#минск#беларусь#спорт
ОСТАЛОСЬ ДВА ДНЯ ДО ПОДОРОЖАНИЯ СЛОТОВ НА IRONMAN
Уже 1 июля 2022г. изменится цена на все дистанции IRONMAN!
Окунись с нами в спортивный праздник #MINSKTRIATHLON2022 уже 31 июля!
Переходи по ссылке для регистрации
#belstarBiathlon#belStarMinSkiCup#belstarMinskMarathon#belstarMinskTriathlon#belstarCycling#belstarChristmas#minsktriathlon2022
#belstar#белстар#триатлон#плавание#бег#спорт#велоспорт#биатлон#марафон#минск#беларусь#спорт
Не упусти возможность запечатлеть свое имя на логотипе самого крупного спортивного мероприятия Беларуси, а также получить именной стартовый номер для участия #MINSKTRIATHLON2022
Для этого тебе всего лишь нужно зарегистрироваться до 10 июля 2022г. включительно!
Так же, спешим напомнить что с 01 июля 2022г. меняется стоимость на следующие дистанции:
½ IRONMAN
¼ IRONMAN
⅛ IRONMAN
Ссылка для регистрации в описании профиля!
#belstarBiathlon#belStarMinSkiCup#belstarMinskMarathon#belstarMinskTriathlon#belstarCycling#belstarChristmas#minsktriathlon2022
#belstar#белстар#триатлон#плавание#бег#спорт#велоспорт#биатлон#марафон#минск#беларусь#спорт
Ты уже зарегистрировался на одну из трех дистанций IRONMAN?
До 30 июня у тебя есть уникальная возможность зарегистрироваться по сегодняшней цене и окунуться в атмосферу самого крупного спортивного мероприятия этого лета!
И помни, мест с каждым днем становится все меньше!
С 1 июля изменятся цены на все дистанции IRONMAN, времени не так много!
Переходи по ссылке и регистрируйся!
#belstarBiathlon#belStarMinSkiCup#belstarMinskMarathon#belstarMinskTriathlon#belstarCycling#belstarChristmas#minsktriathlon2022
#belstar#белстар#триатлон#плавание#бег#спорт#велоспорт#биатлон#марафон#минск#беларусь#спорт
31 июля 2022г. младшие спортсмены, до 13 лет, смогут поучаствовать в самом масштабном спортивном мероприятии Беларуси в 2022г, в категории TriKids.
#MINSKTRIATHLON2022
Для детей будет организован забег на 500 метров.
Стоимость участия всего 1 BYN.
Каждый участник этого забега получит медаль, стартовый номер и подарок от организатора
Зарегистрироваться можно по ссылке.
Всю актуальную информацию вы можете найти на нашем сайте:
▪️Полный Racebook старта
▪️Все дистанции и схемы гонки
▪️Классный чат в Telegram
▪️Стать партнером нашего мероприятия
BELSTAR - Организатор самых крупных спортивных мероприятий в Беларуси, таких как: #belstarBiathlon#belStarMinSkiCup#belstarMinskMarathon#belstarMinskTriathlon#belstarCycling#belstarChristmas#minsktriathlon2022
#belstar#белстар#триатлон#плавание#бег#спорт#велоспорт#биатлон#марафон#минск#беларусь#спорт