Установить свойства виджета в 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
#Italia
Il presidente della Regione Veneto, Alberto #Stefani (#Lega|PfE):
“Ci sono prigioni senza sbarre, senza celle, senza guardie. Sono le prigioni della mente, che ti impediscono di vedere il bello fuori, anche quando c’è. Non consentono ore d’aria, non hanno orari, ragioni o un perché. Eppure esistono. E rinchiudono, ogni giorno, migliaia di cittadini veneti di tutte le età. Giovani, anziani, intere famiglie che dobbiamo impegnarci insieme a liberare dalla sofferenza. Per questo ho depositato una proposta di legge per istituire lo psicologo territoriale nel Servizio Sanitario Regionale del Veneto. Un passo concreto per rendere il supporto psicologico più vicino, accessibile e tempestivo. Vicino ai territori. Ringrazio l’Ordine degli Psicologi, i professionisti che hanno contribuito a questa iniziativa e tutti i consiglieri che vorranno sostenerla, con una consapevolezza: la salute mentale non è un tema secondario. È una priorità. Ed è una responsabilità di tutti.”
@Osservatorioitaliano
#Italia#Referendum2026
Il presidente del Veneto Alberto #Stefani (#Lega|PfE) ha votato attorno alle 8:30 nel seggio 8 allestito presso la scuola primaria "A. Locatelli", a Borgoricco.
@Osservatorioitaliano
Il centro destra trova un accordo per le regionali: Edmondo #Cirielli sarà candidato in Campania, Alberto #Stefani in Veneto e Luigi #Lobuono in Puglia.
La coalizione ha inoltre deciso che il primo partito (al momento #FdI) potrà rivendicare la candidatura in Lombardia nel 2028
@UltimoraPolitics
#Veneto – Alberto #Stefani (#Lega) sarà il nuovo Presidente della regione. Sconfitto il candidato del csx #Manildo (#PD).
Succede a Luca #Zaia, in carica dal 7 aprile 2010.
@UltimoraPolitics
#Italia🇮🇹
#Regionali
#Veneto
Risultati finali. Seggi.
Sezioni scrutinate: 4.729/4.729 (100%).
Lega - Liga Veneta Stefani Presidente (#LSP|PfE): 19
Fratelli d'Italia - Giorgia Meloni (#FdI|ECR): 9
Forza Italia Berlusconi Autonomia per il Veneto (#FI|PPE): 3
Liga Veneta Repubblica V.A.: 1
Unione di Centro (#UdC|PPE): 1
🟦 Totale liste di centro-destra: 33¹
Partito Democratico - Manildo Presidente (#PD|S&D): 10
Alleanza Verdi e Sinistra (#AVS|G/EFA|LEFT): 2
Movimento 5 Stelle (#M5S|LEFT): 1
Uniti per Manildo Presidente: 1
Le civiche venete per Manildo Presidente: 1
🟧Totale liste di centro-sinistra: 15
⬛️ Szumski resistere Veneto: 2
¹ Cui si aggiunge il Presidente eletto Alberto #Stefani (LSP)
@TuttoElezioni
Elezioni regionali - Chiuse le votazioni, ora lo scrutinio.
Salvo sorprese, secondo i sondaggi, sono attese le vittorie di:
- Alberto #Stefani (#Lega) in #Veneto
- Antonio #Decaro (#PD) in #Puglia
- Roberto #Fico (#M5S) in #Campania
@UltimoraPolitics
#Italia#Suppletive
✅ Giulio #Centenaro (#Lega|PfE) e Alberto #DiRubba (Lega) sono eletti deputati rispettivamente al posto dell’ex sottosegretario e attuale Assessore all’Industria Massimo #Bitonci e del Presidente della Regione Veneto, Alberto #Stefani.
@OsservatorioItaliano
#Italia🇮🇹
#Regionali
#Veneto
❗️Alberto #Stefani (#LSP|PfE; sostenuto anche da #FdI|ECR, #FI|PPE, #NM|PPE, #UdC|PPE, #PdF|Destra cristiana, #PRI|Centro, #DCR|Centro, #LVR|Autonomisti, liste minori e civici) è stato eletto Presidente della Giunta regionale del Veneto.
@TuttoElezioni
#Italia🇮🇹
#Regionali
#Veneto
Risultati parziali.
Sezioni scrutinate: 2.590/4.729 (54,77%).
🟦 Alberto #Stefani (#LSP|PfE; sostenuto anche da #FdI|ECR, #FI|PPE, #NM|PPE, #UdC|PPE, #PdF|Destra cristiana, #PRI|Centro, #DCR|Centro, #LVR|Autonomisti, liste minori e civici): 63,87%
🟧 Giovanni #Manildo (#PD|S&D; sostenuto anche da #M5S|LEFT, #AVS|G/EFA|LEFT, #IV|RE, #Az|RE, #PiùEU|RE, #PSI|S&D, #Pos|S&D, #Volt|G/EFA, #PRC|LEFT, liste minori e civici): 29,30%
⬛️ Riccardo #Szumski (#Italexit|Euroscetticismo e liste minori): 5,18%
@TuttoElezioni