Установить свойства виджета в 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
Arsenal vs Newcastle
Different styles. Different tempo. Same question
Who actually wins?
Track how the market is moving
Watch sentiment shift in real time
No noise. Just signal
Join here
https://edgemarket.ai/bnb/football/who-will-win-arsenal-vs-newcastle/statistics/69e0e716dcd75d8e4622fe7f
#EdgeMarket#Football#Arsenal#Newcastle
⚽ Manchester City vs Newcastle United
📅 February 21, 2026 — Premier League
Control vs intensity.
Possession vs transition.
Who bends the match to their rhythm?
📊 Track the match signals:
🔗edgemarket.ai
#MCINEW#ManCity#Newcastle#FootballAnalytics#EdgeMarket
England Premier League🏴
2026-03-22 12:00 UTC
Newcastle vs. Sunderland
Predicted outcome: Newcastle❌
Predicted score: 2:1
Actual: Sunderland 1:2
#Newcastle#Sunderland
2026-03-22 14:15 UTC
Tottenham vs. Nottingham Forest
Predicted outcome: Draw❌
Predicted score: 2:2
Actual: Nottingham Forest 0:3
#Tottenham#NottinghamForest
2026-03-22 14:15 UTC
Aston Villa vs. West Ham
Predicted outcome: Aston Villa✅
Predicted score: 2:1
Actual: Aston Villa 2:0
#AstonVilla#WestHam
#Football#PremierLeague
England Premier League🏴
2026-05-10 13:00 UTC
Burnley vs. Aston Villa
Predicted outcome: Aston Villa❌
Predicted score: 1:2
Actual: Draw 2:2
#Burnley#AstonVilla
2026-05-10 13:00 UTC
Crystal Palace vs. Everton
Predicted outcome: Everton❌
Predicted score: 1:2
Actual: Draw 2:2
#CrystalPalace#Everton
2026-05-10 13:00 UTC
Nottingham Forest vs. Newcastle
Predicted outcome: Nottingham Forest❌
Predicted score: 2:1
Actual: Draw 1:1
#NottinghamForest#Newcastle
2026-05-10 15:30 UTC
West Ham vs. Arsenal
Predicted outcome: Arsenal✅
Predicted score: 1:2
Actual: Arsenal 0:1
#WestHam#Arsenal
#Football#PremierLeague
England Premier League🏴
2026-04-12 13:00 UTC
Crystal Palace vs. Newcastle
Predicted outcome: Draw❌
Predicted score: 1:1
Actual: Crystal Palace 2:1
#CrystalPalace#Newcastle
2026-04-12 13:00 UTC
Nottingham Forest vs. Aston Villa
Predicted outcome: Aston Villa❌
Predicted score: 0:1
Actual: Draw 1:1
#NottinghamForest#AstonVilla
2026-04-12 13:00 UTC
Sunderland vs. Tottenham
Predicted outcome: Sunderland✅
Predicted score: 2:1
Actual: Sunderland 1:0
#Sunderland#Tottenham
2026-04-12 15:30 UTC
Chelsea vs. Manchester City
Predicted outcome: Draw❌
Predicted score: 1:1
Actual: Manchester City 0:3
#Chelsea#ManchesterCity
#Football#PremierLeague
England Premier League🏴
2026-05-02 14:00 UTC
Newcastle vs. Brighton
Predicted outcome: Brighton❌
Predicted score: 1:2
Actual: Newcastle 3:1
#Newcastle#Brighton
2026-05-02 14:00 UTC
Wolves vs. Sunderland
Predicted outcome: Sunderland❌
Predicted score: 1:2
Actual: Draw 1:1
#Wolves#Sunderland
2026-05-02 14:00 UTC
Brentford vs. West Ham
Predicted outcome: Brentford✅
Predicted score: 2:1
Actual: Brentford 3:0
#Brentford#WestHam
2026-05-02 16:30 UTC
Arsenal vs. Fulham
Predicted outcome: Arsenal✅
Predicted score: 2:1
Actual: Arsenal 3:0
#Arsenal#Fulham
#Football#PremierLeague
England Premier League🏴
2026-04-25 11:30 UTC
Fulham vs. Aston Villa
Predicted outcome: Fulham✅
Predicted score: 2:1
Actual: Fulham 1:0
#Fulham#AstonVilla
2026-04-25 14:00 UTC
Wolves vs. Tottenham
Predicted outcome: Draw❌
Predicted score: 2:2
Actual: Tottenham 0:1
#Wolves#Tottenham
2026-04-25 14:00 UTC
Liverpool vs. Crystal Palace
Predicted outcome: Liverpool✅
Predicted score: 2:1
Actual: Liverpool 3:1
#Liverpool#CrystalPalace
2026-04-25 14:00 UTC
West Ham vs. Everton
Predicted outcome: Draw❌
Predicted score: 1:1
Actual: West Ham 2:1
#WestHam#Everton
2026-04-25 16:30 UTC
Arsenal vs. Newcastle
Predicted outcome: Arsenal✅
Predicted score: 2:1
Actual: Arsenal 1:0
#Arsenal#Newcastle
#Football#PremierLeague
England Premier League🏴
2026-04-18 11:30 UTC
Brentford vs. Fulham
Predicted outcome: Brentford❌
Predicted score: 2:1
Actual: Draw 0:0
#Brentford#Fulham
2026-04-18 14:00 UTC
Newcastle vs. Bournemouth
Predicted outcome: Draw❌
Predicted score: 2:2
Actual: Bournemouth 1:2
#Newcastle#Bournemouth
2026-04-18 14:00 UTC
Leeds vs. Wolves
Predicted outcome: Leeds✅
Predicted score: 2:1
Actual: Leeds 3:0
#Leeds#Wolves
2026-04-18 16:30 UTC
Tottenham vs. Brighton
Predicted outcome: Brighton❌
Predicted score: 1:2
Actual: Draw 2:2
#Tottenham#Brighton
2026-04-18 19:00 UTC
Chelsea vs. Manchester United
Predicted outcome: Draw❌
Predicted score: 2:2
Actual: Manchester United 0:1
#Chelsea#ManchesterUnited
#Football#PremierLeague