Установить свойства виджета в 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
I present a soft, relaxed, cozy, warm soul (and body 😉) plaid shirt.
Autumn is coming 🍂 and we will all need it paired with denim, leather jackets and trench coats soon. And for those who can't wait - try to style with summer cotton skirts, one love 💕
#inspirationINVOGA
🌺 Flowers always, 🌼 flowers everywhere!
🌺Flower Like:
- choker
- belt (I liked it very much 👌🏼 - as an alternative to a choker)
- brooch
🌸Flower on:
- shoes
- swimsuit
- shirt
#inspirationINVOGA
TOP 5 ideal neighbors for metallic trousers:
1. White T-shirt
2. Black/white tank top
3. Basic jersey
4. Masculine shirt or jacket
5. Classic longsleeve
Shine with pleasure and let the whole world be reflected in your pants - no matter how it sounds😂
#inspirationINVOGA
There are five must-have accessories for the upcoming (and for someone have already come) cold weather:
1. Voluminous long scarf
2. Bib
3. Short or long gloves
4. Puffy/quilted bag
5. Balaclava
#inspirationINVOGA
Let's look at the beauty celebration from Prada about the new fragrance PARADOXE
Here we have everything in style:
conciseness in color and silhouettes;
oversized jackets
socks
a drop (or not a drop) of glitter and a few feathers
leather
crossbody with very short straps
And triangles, triangles, triangles😊
#inspirationINVOGA
Hoodie + Coat - Yes or No?
As for me, there is nothing better and more convenient than such a couple for daily routine worries that have to be done more often than bright events happen😉🤷🏼♀️
While it is still not too cold, the coat can be left open. The hoodie can be worn without an underlayer. However, it is also not forbidden to pry off the turtleneck to save the throat and tighten the belt on the coat.
#inspirationINVOGA
A bit of street style from Paris Fashion Week Spring 2023:
- total denim, asymmetric denim, double waist,
- loose knit jersey,
- bomber jackets, leather coats, and trench coats,
- fit and transparency,
- balaclavas,
- over-the-knee boots and high boots
#inspirationINVOGA
☕️It's cloudy and rainy outside the window☔️. The mood is to wrap yourself in a knitted dress and enjoy your favorite cappuccio - what could be better for a Wednesday morning?
Favorite🏆 styles:
1. Knitted dress with sneakers
2. Knitted dress with trumpet/jockey boots that overlap with the dress.
3. Knitted dress overskirt
4. Knitted dress with rough, worn leather
#inspirationINVOGA
I went to Etro Spring 2023 street style for paints, prints, and textures, sharing the mood I caught there and photos made by my own hands 🤲🏼
I’ll start with the atmosphere, the show, and as a result, the street style took place in the industrial zone of Milan and was accompanied by a roar, howl, and signals of disgruntled trucks 🚚🚛 , traffic that was not blocked, but photographers and street stylers scurrying everywhere and everywhere, significantly complicated it 🔴
And then everything is as expected - notes of ethnicity in the form of jersey with fringes, small and complex prints, bright saturated colors, patchwork, some leather, but more suede.
I have loved Etro for many years and have chosen the perfect accents for my wardrobe there! ❤️🤎
#inspirationINVOGA
In the meantime, Milan is taking over the baton of Fashion week, in which I am also going to participate and share with you. We review and study London street style.
Lots of ruffles and frills, puffed sleeves and huge collars, brocade and tulle combined with a bit of English stiffness, plaid, lots of Mary Jane variations, golfs, leather, and punk casualness 🎸🤘🏼
#inspirationINVOGA
Who has butterflies in their stomach? 🦋😉 Release! This summer, and next fall, you can definitely👌🏼
We are not limited to flowers, we add butterflies in all dimensions - tops, jewelry, bags, belts, shoes, and when autumn comes, it will come to jackets.
Catch it while the season and treat with care😉
#inspirationINVOGA