Установить свойства виджета в 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
🆓REDEEM CODES🆓
🎁Reverse: 1999 #October#Codes
🎮Download Reverse 1999 v2️⃣.8️!!!
【 Reverse: 1999 v2.8 Codes 】
✨🎁【 NoWayBack 】NEW!! - Get 20k sharpodonty, 10k dust, two fine insight packages, and 30 clear drops
✨🎁【 1999happy2ndanniv 】NEW!! - Get 1k clear drops
...
For a complete code list for Reverse 1999, go to 🎁👉Reverse: 1999 Redeem Codes (October 2025).
Add @APKFreeDownloader_Bot to get any apk you want.
Wikipedia每日一图(#October 31, 2025)https://ift.tt/QR7ezMr
Illustration of Davy Jones sitting on his locker, wearing a pirate captain's uniform. Today is Halloween.. 了解更多 . #Wikipedia每日一图
Wikipedia每日一图(#October 30, 2025)https://ift.tt/O1FZynC
Schwetzingen Palace gardens, Schwetzingen, Germany: view from the Garden Theatre to the Temple of Apollo.. 了解更多 . #Wikipedia每日一图
Wikipedia每日一图(#October 29, 2025)https://ift.tt/vGamzqS
Portrait of a Peacock dance performer during the harvest festival of Thai Pongal in the Indian states of Tamil Nadu and Kerala.. 了解更多 . #Wikipedia每日一图
Wikipedia每日一图(#October 28, 2025)https://ift.tt/cY3MkvR
Gotland Grand National 2023. Gotland Grand National has long been considered the world’s largest Enduro competition and was first run in 1984.. 了解更多 . #Wikipedia每日一图
Wikipedia每日一图(#October 27, 2025)https://ift.tt/9bxATRS
A red squirrel (Sciurus vulgaris) eating a nut in Bednarski Park (Kraków, Poland).. 了解更多 . #Wikipedia每日一图
Wikipedia每日一图(#October 26, 2025)https://ift.tt/rb7GJzK
A beach chair on the beach of Juliusruh is illuminated by the rising morning sun.. 了解更多 . #Wikipedia每日一图
Wikipedia每日一图(#October 25, 2025)https://ift.tt/EGTsNAS
African blue flycatcher (Elminia longicauda) at Kibale forest National Park, Uganda.. 了解更多 . #Wikipedia每日一图
Wikipedia每日一图(#October 23, 2025)https://ift.tt/r3K6aHY
American actress Margaret Qualley at 70th Berlin International Film Festival. Today is her birthday.. 了解更多 . #Wikipedia每日一图
Wikipedia每日一图(#October 22, 2025)https://ift.tt/2alTmRv
Mural Kinderfreuden by German painter Dieter M. Weidenbach. Today is his 80th birthday.. 了解更多 . #Wikipedia每日一图