Установить свойства виджета в 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
⌛️#accaddeoggi⏳
8 Agosto 1956: Scoppia un incendio nella miniera belga di Marcinelle. Morirono 262 persone, di cui 136 italiani. L'evento, causato da un incendio che in breve tempo riempì di fumo l'intero impianto di areazione, fu uno dei peggiori disastri minerari di sempre e il terzo, in ordine di vittime, per quanto riguarda gli immigrati italiani all'estero.
📌 Accadeva anche...
🏛 LaNostraStoria
⌛️#accaddeoggi⏳
14 Maggio 1955: Viene siglato il Patto di Varsavia tra Unione Sovietica, Ungheria, Romania, Polonia, Germania dell’Est, Cecoslovacchia, Bulgaria, Albania. Il nome esteso del patto era “Trattato di amicizia, cooperazione e mutua assistenza” e di fatto venne concepito come l’antitesi della NATO, dalla quale l’URSS era stata rifiutata, e nella quale, non a caso, la Germania dell’Ovest era entrata solo una settimana prima. Il mondo venne a trovarsi così diviso in due blocchi ostili.
Il Patto fu costituito da undici articoli ma quello fondamentale, per la storia degli anni successivi, fu il quarto che imponeva la reciproca difesa e la mobilitazione degli eserciti dei singoli alleati in caso di aggressione a uno dei paesi aderenti. Questa alleanza durò per 36 anni. Il Patto di Varsavia venne sciolto nel 1991 a Praga e successivamente quasi tutti i paesi ex membri fecero il loro ingresso nella NATO.
📌 Accadeva anche...
🏛 LaNostraStoria
⌛️#accaddeoggi⏳
7 Maggio 1945: La Germania, rappresentata dal generale Jodl, firma con gli alleati a Reims la resa incondizionata del Reich. Questa entrò in vigore il giorno successivo ma, per volere di Stalin, venne firmata una seconda resa la sera dell'8 maggio, già il 9 nell'orario di Mosca. Per questo motivo la Russia riconosce da allora il 9 maggio come giornata della Vittoria.
📌 Accadeva anche...
🏛 LaNostraStoria
San Patrizio non è solo trifogli, cappellini verdi e birra .
È anche storia, rivolta, sangue versato per l’identità di un popolo.
Oggi, giorno in cui l’Irlanda viene celebrata nel mondo, vi portiamo davanti alla tomba di Bobby Sands a Milltown Cemetery, Belfast.
Un ragazzo di 27 anni che ha scelto di morire per difendere la libertà di un popolo intero.
La lotta non è finita con lui nel 1981.
Vive ancora in ogni pietra, in ogni ricordo.
Buon Lá Fhéile Pádraig, ma ricordate: l’Irlanda vera porta anche cicatrici. 🇮🇪
#irlanda#accaddeoggi#storia#politica#notizie
Ci sono pagine di storia poco raccontate perché parlano di persone comuni.
Di case rubate.Di notti interrotte. Di vite spezzate nel silenzio.
Tra il 1943 e il 1947 migliaia di italiani dell’Istria, di Fiume e della Dalmazia furono portati via così: senza spiegazioni, senza ritorno.
Molti vennero gettati nelle foibe.
Senza un nome. Senza una tomba.
E chi sopravvisse fu costretto a lasciare tutto: la propria terra, i ricordi, l’identità.
Oltre 250.000 persone in fuga con una valigia piena di assenze.
E all’arrivo, spesso, insulti e diffidenza.
Per troppo tempo questa storia è stata ignorata.
Ma il dolore non sparisce se lo cancelli.
#italia#storia#foibe#accaddeoggi#storiaitaliana
Pasqua non è solo resurrezione, è trasformazione.
Nel caos di oggi, il vero cambiamento è interiore: restare lucidi, consapevoli e umani.
Rinascere non è tornare come prima, è diventare qualcosa di nuovo.
#accaddeoggi#storia#pasqua#cristianesimo#notizie
L’Inno d’Italia non è “vecchio”, non è “retorico” e non è “fa*cista”.
È semplicemente più serio di noi.
Il 10 dicembre 1847 è nato un Paese che ancora non c’era.
La domanda oggi è: siamo ancora all’altezza di quelle parole?
Scrivilo nei commenti👇🇮🇹
Tu lo senti ancora tuo?
#accaddeoggi#storia#italia#roma#milano#governo#oggi#fatti#avvenimenti#storico#politica#politicaitaliana#destra
Film per Halloween? Non solo paura.
“L’Esorcismo di Emily Rose” è un viaggio tra fede e scienza, tra luce e ombra.
Un processo alla verità dove il demone non è solo un mostro da scacciare… ma qualcosa (o qualcuno) che vive dentro di noi.
Ispirato a una storia vera, questo film ci costringe a guardare negli occhi ciò che non vogliamo vedere: la sottile linea tra mente e mistero, tra Bene e Male.
E se i demoni non ci possedessero… ma fossimo noi a dar loro forma?
Questo Halloween, più che spaventarti, prova a riflettere.
Il vero orrore, forse a volte, è conoscere se stessi.
#halloween#halloween2025#horror#film#cinema#cinemahorror#accaddeoggi#oggi#occulto
Diciott’anni e un ideale.
Oggi abbiamo tutto, ma non crediamo più in niente.
Sergio Bresciani non giocava a fare l’uomo:
Lo era davvero.
#storia#accaddeoggi#guerra#politica#italia#storiaitaliana#oggi#fatti#eventistorici#eventi#accadevaoggi#ricorrenze#ricorrenza