Установить свойства виджета в 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
La giunta regionale dell’#EmiliaRomagna con presidente #Bonaccini e vicepresidente #Schlein ha restituito fra il 2021 e il 2022 al ministero delle Infrastrutture 55,2 milioni di euro di un finanziamento di 71,9 milioni di euro ricevuto dallo Stato per la manutenzione…
La giunta regionale dell’#EmiliaRomagna con presidente #Bonaccini e vicepresidente #Schlein ha restituito fra il 2021 e il 2022 al ministero delle Infrastrutture 55,2 milioni di euro di un finanziamento di 71,9 milioni di euro ricevuto dallo Stato per la manutenzione e la messa in sicurezza dei corsi di acqua della Regione. (Open)
@UltimoraPolitics
#Italia#EmiliaRomagna#Parma
Fallite le trattative col centrosinistra e con Pizzarotti: a Parma il #M5S|NI non parteciperà alle amministrative.
@UltimoraPolitics
#Italia#EmiliaRomagna#Bologna
In una conferenza stampa a Bologna, #PaP|Sinistra radicale ha denunciato la aggressione e il tentato stupro di una militante di PaP da parte di un gruppo di persone ucraine neofasciste, con chiara simbologia banderista.
@UltimoraPolitics
#Italia#EmiliaRomagna#ReggioEmilia
Le delegazioni di #IV|RE e #PiùE|RE sono state aggredite a Reggio Emilia durante le celebrazioni del 25 aprile.
@UltimoraPolitics
#Italia#Regionali#EmiliaRomagna
Il 17 e il 18 novembre si voterà per l'elezione del Presidente della Regione Emilia-Romagna e il contestuale rinnovo dei 50 consiglieri regionali (contemporaneamente con l'Umbria) eletti all'interno dei 9 collegi regionali corrispondenti alle 9 province.
Si voterà dalle 7 alle 23 di domenica 17 e dalle 7 alle 15 di lunedì 18.
Il Presidente è eletto in un unico turno: basta la maggioranza relativa dei voti per poter essere eletti e gli sarà assicurata una maggioranza di almeno 27 seggi. Lo sbarramento è fissato al 3% per le liste coalizzate e al 5% per le liste non coalizzate.
La Regione è sempre stata la roccaforte prima della sinistra e oggi del centrosinistra e secondo i sondaggi dovrebbero vedere confermata l'amministrazione uscente.
La Presidente in carica è Irene #Priolo (#PD|S&D), facente le veci del Presidente eletto Stefano #Bonaccini (PD) a gennaio 2020 con il 51% dei voti che si è dimesso per entrare in carica come europarlamentare.
@OsservatorioItaliano
#Italia#Regionali#EmiliaRomagna
Il Sindaco di #Ravenna Michele #DePascale (#PD|S&D) è il nuovo Presidente della Regione Emilia-Romagna.
Succede all'europarlamentare e Presidente del Partito Democratico Stefano #Bonaccini.
@OsservatorioItaliano
Autonomia, via libera alla richiesta del referendum. #Campania, #Toscana, #Sardegna, #Puglia ed #EmiliaRomagna hanno approvato in consiglio regionale gli stessi provvedimenti: il quesito che intende abolire interamente la norma e l'altro per la modifica parziale. I delegati delle regioni presenteranno i quesiti alla Corte Costituzionale. (Ansa)
@UltimoraPolitics
Le regioni #EmiliaRomagna e #Puglia interrompono tutti i rapporti con #Israele. Il presidente della Puglia #Emiliano: "Genocidio di inermi palestinesi in atto da parte del governo #Netanyahu"
@UltimoraPolitics
Il PNRR non può essere utilizzato per aiutare l'Emilia Romagna.
Cerchiamo di quantificare il disastro.
Danni per almeno 5/6 miliardi di euro: circa 15 milioni di piante da estirpare (per realizzare un ettaro di frutteto ci possono volere 50 mila euro); mille aziende in crisi e quattrocento allevamenti alluvionati; cinquantamila posti di lavoro a rischio.
Ci vorranno cinque anni per raccogliere qualche frutto da un albero nelle zone colpite.
Saranno 400 milioni i kg in meno di grano nel mercato nazionale e mancherà il 20% della frutta. L'effetto: saliranno i prezzi di questi beni essenziali e a pagare saranno i più deboli.
Il PNRR però si potrà utilizzare per investire in armi, anche grazie al voto favorevole di quasi tutti i nostri partiti politici.
Giudicate voi.
La mia al TG Plus di Cusano Italia TV
#alluvioneemiliaromagna#alluvione#emiliaromagna#politica#italia#televisione#informazione#giornalismo#PNRR#UnioneEuropea
https://x.com/SavinoBalzano/status/1836837611845074949?t=zUTmU8s5R3-XF9mHDYQtMw&s=19
La drammatica #Alluvione viene ovviamente imputata agli epocali cambiamenti climatici del nostro tempo. Credo sia una bella paraculata, utile a nascondere l'assoluta incapacità di certi amministratori, a partire da #Bonaccini, che non hanno fatto assolutamente nulla per prevenire questo disastro. Anzi.
Attendo che compaiano in tv con la solita felpina della protezione civile a fare gli eroi.
La verità è che episodi come questi, nella loro tragicità, vengono strumentalizzati per spingere a tavoletta la folle ideologia #green, da scaricare ovviamente sulle spalle dei poracci: credo che sul punto l'ex Presidente dell'#EmiliaRomagna saprà fornire il suo dotto contributo dalle democraticissime istituzioni dell'#UE.
La mia a #5Notizie, #RadioCusanoCampus.
#alluvioneromagna#alluvioneemiliaromagna
https://x.com/SavinoBalzano/status/1858796809008660926?t=zoW1JPySaEFK3hgRxcxNgg&s=19
Solo due numeri sulle elezioni regionali perché quello che leggo ha del surreale: va bene tutto, ma il metro deve essere lo stesso.
In #Umbria i votanti passano da 455.000 a 366.000 e, dunque, l'affluenza cala dal 65% al 52%. Nel 2019 a #Tesei servirono 255.000 voti per vincere. Ieri a #Proietti ne sono bastati 182.000. Lo sconfitto del 2019 (Bianconi) di voti ne prese 166.000. Questo per dire che non c'è stato alcun plebiscito e la spazzatura che si legge in giro (tipo «non ci hanno visto arrivare») è semplicemente comica. Gli umbri hanno punito l'amministrazione uscente che evidentemente non ha convinto, ma il loro disappunto lo hanno espresso restando a casa. Questi sono i numeri, nessun «avanti popolo, alla riscossa!».
In #EmiliaRomagna, i votanti passano da 2.400.000 a 1.600.000: un vero e proprio bagno di sangue. L'affluenza passa dal 68% al 46%: un salasso allucinante. Qui il vincitore #DePascale ha preso 922.000 voti: non solo sono meno di quanti ne prese #Bonaccini, ma sono persino meno di quanti ne prese Borgonzoni (1.014.000) che nel 2020 fu sconfitta. Che vuol dire? Semplicissimo: l'amministrazione uscente è stata massacrata dall'#astensionismo, letteralmente fustigata. Anche qui, dunque, rispetto assoluto per il risultato e augurio di buon lavoro al Presidente, ma nessuna «bandiera rossa trionferà!». Cerchiamo di essere seri, un minimo.
L'astensione per me è da sciocchi (anche perché rattrista, ma conta 0 da tutti i punti di vista), ma abbiamo due sole possibililità (sempre se vogliamo essere seri): o vale niente, sempre, o la si considera, sempre.