Установить свойства виджета в 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
🇿🇦Парк слонов Тембе🐘
Парк был создан в северо-восточной части Южной Африки в 1983 году для защиты слонов, мигрировавших между ЮАР и Мозамбиком. 🌍
С 1991 года парк открыт для посетителей — сегодня здесь обитает около 250 самых крупных в мире слонов!🏞
Если вы любите сафари, в парке сможете увидеть и других представителей «большой пятёрки»: 🦁 львов, 🐆 леопардов, 🦏 носорогов и 🐃 буйволов.
🎥 Видео в режиме реального времени:
👉https://www.youtube.com/watch?v=VUJbDTIYlM4
#ЮАР#Природа#Сафари#Африка#ПаркСлонов#BigFive
🦁Kruger National Park, located in the northeast of South Africa, is the country’s oldest national park (founded 🗓in 1926) and one of the largest national parks in the world 🌍
To fully experience the park, visitors usually spend several days there. That is why campsites are located directly inside the park ⛺️
There are nine entrance gates, all of which close at night, as it is dangerous to remain in the park after dark without a guide 🌙⚠️
🐘🦏🦬🦁🐆
Kruger National Park is home to:
• about 12,000 elephants,
• 5,000 rhinos,
• 2,500 buffalo,
• 1,500 lions,
• 1,000 leopards,
• and hundreds of bird species🐦
📹Video: 10 minutes with the inhabitants of Kruger National Park
https://www.youtube.com/watch?v=ZnbsthIPMiw
#Nature#Animals#KrugerNationalPark#SouthAfrica#BigFive#Wildlife#Africa
🦁Национальный парк Крюгера на северо-востоке ЮАР — старейший национальный парк страны (основан 🗓 в 1926 году) и один из крупнейших национальных парков мира 🌍
Чтобы по-настоящему прочувствовать масштаб и атмосферу парка, сюда приезжают на несколько дней. Именно поэтому прямо на его территории работают кемпинги ⛺️
Всего у парка 9 въездов, которые закрываются на ночь — находиться здесь после захода солнца без проводника опасно 🌙⚠️
🐘🦏🦬🦁🐆
В Крюгере обитают:
• около 12 000 слонов,
• 5 000 носорогов,
• 2 500 буйволов,
• 1 500 львов,
• 1 000 леопардов,
• а также сотни видов птиц🐦
📹Видео (10 минут с обитателями парка Крюгера):
https://www.youtube.com/watch?v=ZnbsthIPMiw
#Природа#Животные#НациональныйПарк#Крюгер#ЮАР#BigFive#Африка
💴South African rands are, arguably, among the most beautiful banknotes and coins in the world 🌍✨
South African banknotes feature the iconic “Big Five” animals 🐘🦁🦏:
• R10 — rhinoceros
• R20 — elephant
• R50 — lion
• R100 — buffalo
• R200 — leopard
The reverse side of each note features Nelson Mandela, honoring his legacy as a symbol of democracy, freedom, and national unity in South Africa ✊🏿🇿🇦
#SouthAfrica#Currency#rands#BigFive#NelsonMandela#Heritage#Culture
🐆Inverdoorn Game Reserve – a true safari escape just 2.5 hours from Cape Town! 🐾
🌿 Located in the semi-arid Karoo region, Inverdoorn offers unforgettable encounters with the Big Five and cheetah conservation experiences.
🌍 Take a guided game drive, stay overnight in stylish lodges, and enjoy the stunning silence of the wild. 🌄
📍 Perfect for a weekend getaway into nature’s heart.
🎬 Video: https://www.youtube.com/watch?v=31OzaX7N5TA
#SouthAfrica#Safari#Inverdoorn#Wildlife#CapeTownTrips#GameReserve#BigFive
🐘А вы знали, что…
слон — один из представителей знаменитой африканской «Большой пятёрки»?
🐾 Этот термин появился у охотников на крупную дичь и обозначал пять самых опасных животных при охоте пешком в Африке.
В легендарную пятёрку входят:
слон, лев, леопард, африканский буйвол и носорог🦁🐆🦏
#BigFive#Африка#ЮАР#Слон#ДикаяПрирода
_______________
🐘Did you know?
The elephant is one of Africa’s famous Big Five.
🐾 The term Big Five was coined by early big-game hunters and refers to the five most dangerous animals to hunt on foot in Africa.
The iconic group includes the elephant, lion, leopard, African buffalo, and rhinoceros🦁🐆🦏
#BigFive#SouthAfrica#Africa
#Elephant#Wildlife
🐆Inverdoorn Game Reserve — сафари под Кейптауном! 🇿🇦
🌿 Всего в 2,5 часах езды от Кейптауна находится заповедник «Инвердурн» — уникальное место в полупустыне Кару, где можно увидеть Большую африканскую пятёрку, поучаствовать в программах по защите гепардов и насладиться настоящей дикой природой.
🌍 Стильные лоджи, тишина саванны и профессиональные гиды сделают поездку незабываемой. 🌄
📍 Идеальный вариант для сафари на выходные.
🎬 Видео: https://www.youtube.com/watch?v=31OzaX7N5TA
#ЮАР#Сафари#Inverdoorn#ДикаяПрирода#ПутешествияЮАР#BigFive#Гепард
🇿🇦Tembe Elephant Park🐘
The park was established in the north-eastern part of South Africa in 1983 to protect elephants migrating between South Africa and Mozambique. 🌍
It opened to visitors in 1991 and is now home to about 250 of the largest elephants in the world. 🏞
If you’re into safaris, you can also spot the rest of the Big Five — 🦁 lions, 🐆 leopards, 🦏 rhinos, and 🐃 buffalo.
🎥 Live video:
👉https://www.youtube.com/watch?v=VUJbDTIYlM4
#SouthAfrica#Nature#Safari#BigFive#Elephants#Tembe#Wildlife#Travel#Africa