Установить свойства виджета в 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
Dr. Fischer
Steinbock Riesling
Германия 🇩🇪, Мозель-Саар-Рувер, белое, полусухое, крепость 12%, Рислинг.
Гордый козерог, как символ стойкости и бесстрашия в крутых поворотах жизни (козерогам привет🤘), конечно меня заинтересовал и не обманул ожиданием.
Блестяще, минерально, ароматно, а вкус требует повторного глотка.
В аромате цитрусы, ананас и стержень карандаша или мелка кохинор).
Вкус нежный, мягкий, живой, прекрасно сбалансированный, с интересной структурой и ярким послевкусием.
Ценник +/-1500р.
Чин!🍷
#Steinbock#Riesling
@pro_Wines
Lucien Albrecht
Riesling Reserve
Франция🇫🇷, Эльзас AOC, белое, полусухое, крепость 12,5%, моносорт Рислинг, 2019г.
Очаровательная, сдержаная классика. В бокале блестящее золото и салатовые блики.
В носу спокойный, стойкий аромат, минеральные тона, тонкие цитрусовые ноты, сухотравье и первоцветы.
Вкус с дружелюбной кислотностью, насыщен, как и аромат цирусовыми и минеральностью. Послевкусие да!, задумчивое, требующее повторного глотка.
Сможет полежать подождать вас в прохладе 3-5 лет, если вы к нему ппока ещё не готовы)
Ценник +/-1700р.
Замечен в магнолиях.
Чин! 🍷
#Lucien_Albrecht#рислинг
#Riesling
@pro_Wines
Сегодня 13 марта, международный день Рислинга и мне есть что сказать!
Рислинг для меня самый понятный сорт и достаточно лёгкий в уходе, но первые года урожай не давался легко, искали подход и даже больше 50% однажды срезали на землю. Печально, но факт.
Однако в 2023 году его Величество Рислинг приятно нас удивил и подарил прекрасный урожай! Настолько прекрасный, что некоторые виноделы просили меня продать виноград им!
Кстати, Riesling Domaine Bonamy 2023 мы скоро будем разливать по бутылкам и это вино будет готово одним из первых! Урожай умеренный и количество бутылок, соответственно, тоже!
За винификацию отвечал Дмитрий Маслов - наш профессиональный энолог, с которым мы сотрудничаем уже не первый год.
Оцениваем Рислинг 2023 как классное летнее, лёгкое и освежающее вино и с нетерпением ждём выпуска!
Photo by @koni_krim
#Riesling#рислинг#энолог#DomaineBonamy
Дорогие друзья! Наш дебютный Riesling Domaine Bonamy 2023 едет на фестиваль RieslingRoad, который состоится 25 августа, в Москве!
Ищите нас на стенде vino.ru, мы будем там! Регистрация на фестиваль 👉здесь
Будем рады всех видеть! 🥂
#riesling#rieslingroad
#DomaineBonamy#винору
Друзья! Лето - время рислингов и фестиваль RIESLING ROAD возвращается!
Фестиваль уже побывал в Санкт-Петербурге и Екатеринбурге и спешит в Москву.
В Москве 25 августа на веранде ресторана «Дом 16» (Покровский б-р, 16-18, стр. 4-4А) соберутся профессионалы рынка и поклонники рислингов на круговую дегустацию более 100 вин со всего света познакомиться с новинками от партнеров и продегустировать полюбившиеся вина! Мастер-классы, интересные спикеры и отличное настроение в эти жаркие дни обеспечено!
Следуй за рислингом вместе с нами!
Программа и билеты по ссылке. Сайт проекта: https://rieslingroad.ru
@rieslingroad#riesling#rieslinglover#rieslingwine#rieslingroad
Моя последняя любовь, учитывая ровное отношение к Рислингу.
Paddle Creek Riesling Rose
Lake Road
Новая Зеландия🇳🇿, Мальборо, розовое полусухое, купаж 97/3 Рислинг и Пино Нуар.
Лёгкое и приятное вино.
В бокале нежный прозрачный розовый цвет как уходящий весенний закат, чуть с рыжиной. В носу лекие красные фрукты, цитрусы, трава и... сама суть клёвого Рислинга - резина, велосипедная шина, машинное масло на тряпке в гараже .. Вкус маслянистый, не без тропических фруктов, с минимальной кислотностью. При этом хрустящее и свежее послевкусие.
Ценник +/-1100р.
Чин! 🍷
#дайтеДве#рислинг#rose
#Paddle_Creek#Riesling
@pro_Wines
Belmas Risling
Россия 🇷🇺, Крым (Севастополь), крепость 13,5%, моносорт Рислинг, о чём нам лаконично сообщено на этикетке Ri.
Отличный Рислинг из линейки, можно сказать, "Менделеев". Кстати, экземпляр занял высокую позицию в рейтинге лучших российских вин.
В носу персики, цитрусы, цветы и грушевые леденцы. Вкус идеальный - яркий, кислотный, нежно фруктовый с долгим интересным минеральным послевкусием. За оформление и внешний вид бутылки - респект. Очень стильно, да и вкусно)).
Ценник +/- 3000р.
Чин! 🍷
#Крым#Севастополь#Belmas#Riesling#Ri
@pro_Wines