Установить свойства виджета в 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
This is the most accurate description I've heard of Nigel #Farage, and by association, #ReformUK. Daniel Bostock has a good memory of Farage's track record! Take heed, as he's controlled opposition, says what people want to hear, yet considers the man in the street a far-right hooligan while portraying himself as the man down the pub.
https://www.bitchute.com/embed/1JAzLd6931o
Make Britain Great Again? Musk eyeing $100M donation to Nigel Farage and Reform UK, reported the Sunday Times.
The cash infusion, which some insiders say could disrupt the British political scene, is being viewed as Musk's way of giving the finger to the UK Labour government under Keir Starmer, whom the billionaire has recently criticized on issues like free speech and mass migration.
A far cheaper way for Elon Musk to give the finger to Starmer and the entire UK leftist elite would be to give Nick Griffin back his X account. They'd REALLY hate that!
If you're still on X, please post that far and wide!
#FreeNickGriffin
#Musk#Farage
https://x.com/SavinoBalzano/status/1918988108160176497?t=zG6bQzgoH2MFssgcUBIIpw&s=19
Non è una questione di merito: è una questione di metodo. La #democrazia in #Europa sta morendo, e dovremmo preoccuparcene tutti.
Lo sostengo da anni: se davvero un politico fosse in grado di rompere certi equilibri sistemici o di scardinare meccanismi sensibili, verrebbe accoppato senza esitazioni. Fisicamente o mediaticamente, cambia poco.
A gennaio l’ex Commissario europeo francese Thierry Breton è stato chiarissimo: «In caso di interferenze annulleremo le elezioni. Lo abbiamo fatto in Romania e, se necessario, lo faremo anche in Germania». Eccoci serviti.
È vero che all’interno di Alternative für Deutschland esistono frange estremiste, ma definirlo un partito neonazista è una banalizzazione strumentale, come tante altre che abbiamo visto negli anni. È presente da tempo in Parlamento e partecipa alle elezioni nel rispetto delle regole costituzionali. La leader del partito, Alice #Weidel, non ha certo il profilo tipico di una formazione politica hitleriana: è una donna omosessuale dichiarata, ha una compagna – Sarah Bossard, produttrice cinematografica svizzera di origini srilankesi – e insieme crescono due figli.
Il problema non è nel merito delle idee del partito. Il problema è che tutti i sondaggi lo danno come prima forza politica della #Germania.
L’Unione Europea mostra il suo vero volto: la democrazia è accettata solo se vincono “quelli giusti”. La democrazia in Europa è una copertura. Serve a nascondere il pilota automatico, il vincolo esterno, il “whatever it takes”.
Contrariamente alla narrativa dominante, che ci racconta di popoli fieramente europeisti, la gente ha capito benissimo che è tutta una fregatura: un’élite di sciacalli li ha impoveriti, indottrinati, e continua a spingerli dentro un circolo vizioso di paura, mentre si investono montagne di denaro in armi e gli ospedali, le scuole, le università cadono a pezzi.
Questa è una classe dirigente che odia i popoli e la democrazia. Tratta le persone come bestiame da mungere, pelare e macellare. Tutto qui. Sono dei mostri.
La democrazia da queste parti è un bluff, e basterebbe un’informazione libera e seria per smascherare un sistema tanto corrotto e marcio. Ma l’informazione è parte del problema: spesso è finanziata dallo stesso sistema che dovrebbe denunciare. Ricordate la storia degli inglesi alla fame, disperati per la voglia di rientrare nell’#UE? Eppure #ReformUK sta scardinando il bipartitismo britannico, e Nigel #Farage ha ottenuto un risultato straordinario alle amministrative e alle suppletive. Com’è possibile? Come si concilia con il racconto che i tg ci hanno propinato ogni sera per anni?
La democrazia in Europa è solo una maschera, utile a celare i veri interessi di piccoli gruppi dominanti e violenti. I tradizionali schieramenti – destra e sinistra – non erano altro che attori in un teatro che ormai non convince più nessuno.
La gente comincia a capire, guarda altrove. Ed è proprio per questo che viviamo una delle fasi più pericolose della nostra storia: chi comanda oggi non accetterà mai pacificamente un cambio della guardia.
🇬🇧#RegnoUnito – Crisi nel Partito Conservatore: negli ultimi giorni l’ex ministro della salute e dell'immigrazione Robert #Jenrick e, poco dopo, il ministro ombra degli esteri Andrew #Rosindell hanno lasciato il partito per aderire a #ReformUK. Da oltre un anno i Tories subiscono defezioni continue verso il partito di Nigel #Farage.
@UltimoraPolitics24