Установить свойства виджета в 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
Восток всегда играл важную роль в творчестве Ива Сен-Лорана. Азиатская культура являлась источником вдохновения кутюрье, а местные предметы искусства занимали пусть и небольшое, но важное место в коллекции, собранной им вместе с Пьером Берже.
Эта хроника — кадры из первой поездки дизайнера [элегантного в любой обстановке] в Японию в 1963 году. Токио, Киото и Нара — такой маршрут был у парижской делегации, где нашлись мотивы, отразившиеся после в коллекциях дома, аксессуарах и флаконе духов Opium. Открытка в конце — послание, отправленное Ивом Сен-Лораном, Пьером Берже и другими членами группы, в Париж Габриэль Бюшер, директору пресс-службы YSL. Когда вижу такие артефакты очень расстраиваюсь, что бумажные письма канули в лету — столько в них жизни и сантиментов.
📸Yves Saint Laurent pendant son voyage au Japon, 1963. Par muséeyslparis.com
#howaboutstyle
Капюсин — икона элегантности, женственности и стиля 50-60-х годов. Начав карьеру в 17 лет, Жермен Ирен Элен Лефевр выбрала себе шикарное прозвище Capucine — настурция в переводе с французского.
Ее яркий путь пролегал через Голливуд и парижские бульвары с самыми известными домами моды. Она работала с Бельмондо, Мастроянни, Орнеллой Мути, снималась для Кристина Диора и Живанши. При участии последнего она познакомилась с Одри Хепберн и дружила с ней всю жизнь, та же много раз спасала жизнь подруги, которая страдая психическим расстройством, периодически пыталась покончить с собой. К сожалению, одна из таких попыток увенчалась успехом, и в возрасте 62 лет актриса прервала свой красивый, успешный путь. Прах развеяли над морем, которое, надеюсь, бережно сохранило память о ее наследии — вечном изяществе и благородстве.
📸Germaine Hélène Irène Lefebvre aka Capucine through the years, 1950-1970
#howaboutstyle
В 1955 году, еще не став мировой знаменитостью, Брижит Бардо отправилась в Лондон на съемки фильма «Доктор на море». Тогда же была сделана эта хроника — во времена, когда слава еще не сделала невозможным для актрисы гулять по улицам неузнанной.
Эти кадры — удар во все модные сердца. Туфли, юбка-шотландка, сумка-лукошко и шуба, шуба! Нужно все — и даже антуражные мужчины в пальто на заднем плане.
📸Brigitte Bardot pendant le voyage à Londres, 1955. Peter Waugh
#howaboutstyle
Новогодний и ироничный haute couture в декабрьской съемке 1955 года для журнала Jardin des modes.
Пока девушки, одетые в вечерние платья от Jacques Heim, Lanvin, Balenciaga, Christian Dior, Madeline de Rauch и Givenchy, принимают кокетливые позы в компании крупного косматого медведя, редакторский текст напоминает: «не будь той, кто за три дня до Нового года поймет, что у нее так и нет платья мечты, и будет просить свою портную совершить чудо. Поторопись. Намекни близким о своих истинных желаниях». Очевидно, авторы никогда не общались с большим неуклюжим зверем. Какие еще намеки? Все пожелания доносим кратко, четко, максимально понятно. Иначе тут не только без платья можно остаться.
📸 “La belle et la bête” pour Jardin des Modes, 1955. Jacques Moutin
#howaboutstyle
Креативный дуэт французов Ги Бурдана и Шарля Журдана — союз, созданный на небесах 60-х годов.
С одной стороны — узнаваемый почерк фотографа: красивый силуэт, идеальные ноги, изящные туфли, контрастные яркие цвета и глубокие тени. С другой — любимая девушками обувь дизайнера Шарля Журдана, моделями которой он снискал известность. Пара работала вместе более десяти лет, с 1967 по 1981 год, создав серию фотографий, которые были одновременно актуальными, художественными и весьма провокационными, чем и отличались от других модных кампаний своего времени.
P. S. Красные лакированные лодочки с белыми колготками, метко попав в сердце, объявляются новой фэшн-фантазией.
📸Guy Bourdin for Charles Jourdin, 1960s
#howaboutstyle#artinspiration