Установить свойства виджета в 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
Какой наряд вам нравится?
Слева: Шейха Моза в наряде от Ульяны Сергеенко.
Справа: Шейха Хинд (Sheikha Hind bint Hamad Al Thani) в чапане работы ташкентского ателье Мадины Касымбаевой.
Источник фото: ТГ канал darsic.com
#goingout
Этномода по-королевски 👸👑
Принцесса Беатрис с мужем Эдоардо Мапелли Моцци выбрала для ужина в ресторане The Twenty Two в Мэйфэре вот такое "этничное" платье.
Дочь принца Эндрю и Сары Фергюсон в платье Chloe и туфлях Chanel - настоящий амбассадор "этномоды"☺️
#goingout
Сегодня международный день платка и хиджаба 🧕👰
А с нами сегодня прекрасная женщина-
модель Равда Мохамед, которая в 2021 году была представлена как редактор журнала Vogue Скандинавия.
Сомалийско-норвежская модель Равда Мохамед прославилась как вдохновительница флешмоба против запрета хиджаба во Франции.
На Западе Мохамед должна была стать первой мусульманкой в хиджабе, возглавляющей модный журнал, писал The Guardian.
"Я не считаю себя исправлением чего-либо. Если я смогу помочь развитию отрасли, это будет прекрасный вклад", - сказала модель.
Равда родилась в Сомали, а в возрасте 8 лет переехала в Норвегию со своей семьей.
Став моделью, она участвовала в неделях моды в Осло, Париже и Копенгагене, снималась для Vogue США и V-Magazine.
#goingout
Когда и если будете смотреть новый сезон And Just Like That, обратите внимание на полосатый кафтан Кэрри Брэдшоу.
На съемки его прислали из Марракеша, из ателье Marrakshi Life, бренда "медленной" моды, где все ткут вручную местные ремесленники.
Платье ткали специально для героини Сары-Джессики Паркер — видео, как это происходило, есть в карусели.
#goingout#кинокостюм
Как одеваются редакторы модного глянца?
Например, как новый директор редакционного контента британского Vogue Чиома Ннади
То есть #этномодно😊
#goingout
Стереотипы на предмет выхода в оперу отступают, если опера - это Metropolitan, а светский фотограф - автор аккаунта Last night at the MET.
Мы выбрали несколько образов с этно акцентом - непринужденные и не помпезные гости оперы, которые носят свои наряды с удовольствием 🤎
#opera#goingout
Наша любая рубрика #вдогонку произошедшему ещё вчера 🙋
День рождения Sarah Jessica Parker (25 марта)
заставил вспомнить этно шик от легендарной Кэрри Брэдшоу, и вот они - образы последнего сезона, подтверждающие, что этно тренд в моде продолжает набирать обороты!
#goingout
#ЭТНОМОДА ретро-понедельник + ЭТНОМОДА по-королевски 🤴
1 июня состоялась свадьба наследника иорданского престола, принца Хусейна ибн Абдаллы и его избранницы Раджве Аль Саиф. На церемонии присутствовало большое количество гостей, в том числе, главы разных государств и монаршие особы.
Мы бы хотели отметить невероятный наряд шейхи Мозы, которая славится своим превосходным вкусом в одежде. Шейха вышла в легком плаще из кутюрной коллекции Valentino 1989, посвященной творчеству австрийского архитектора Йозефа Хоффмана, известного своими функциональными и структурными предметами декора и мебели.
Photo: Reuters, Getty Images, Valentino
#шейхамоза#valentino#свадьбаиордания#goingout#etnomoda