Установить свойства виджета в 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
🇺🇸Les États-Unis ont rétabli la peine capitale par peloton d'exécution et par injection létale
Le ministère américain de la Justice a annoncé la levée du moratoire sur les exécutions fédérales, instauré sous Joe #Biden, et a promis d'étendre leur application.
RT en français • Osez questionner !
Joe #Biden: “È stato il più grande onore della mia vita servire come vostro Presidente. E mentre è stata mia intenzione ricandidarmi, credo che sia nel migliore interesse del mio partito e del paese per di lasciarela corsae concentrarmi esclusivamente sull'adempimento dei miei doveri di presidente per il resto del mio mandato.
Di questo parlerò alla Nazione più in dettaglio alla fine di questa settimana.
Per ora, permettetemi di esprimere la mia più profonda gratitudine a tutti coloro che hanno lavorato così duramente per vedermi rieletto. Voglio ringraziare la vicepresidente Kamala Harris per essere stata una partner straordinaria in tutto questo lavoro. E permettetemi di esprimere il mio sentito apprezzamento al popolo americano per la fede e la fiducia che ha riposto in me.”
@UltimoraPolitics
🇺🇸 Stati Uniti - l'Fbi sta perquisendo la casa al mare di Joe #Biden a Rehoboth Beach, nel Delaware, nell'ambito della vicenda sui documenti classificati
@UltimoraPolitics
Il presidente americano #Biden sulle elezioni: "Avete visto quello che è accaduto in Italia, vedrete quello che accadrà nel mondo. Non siate ottimisti."
@UltimoraPolitics
🇺🇸 Tre anni dopo l'assalto di Capitol Hill solo il 62% degli elettori ritiene l'elezione di #Biden legittima.
🔥 Uno dei tanti numeri che testimonia una sfiducia nella democrazia americana che, al di là dei complotti più assurdi come quelli che hanno originato gli eventi del 6 gennaio 2021, ha anche delle ragioni concrete.
Nel quarto numero di 270 ci siamo chiesti: la democrazia in America funziona ancora?
Si legge e ci si iscrive qui, gratis: https://youtrend.substack.com/
🎙️#Biden ha appena perso le elezioni
Il primo grande effetto prodotto dall'intervista di Tucker Carlson a Vladimir Putin è stato quello di aver posto fine alla carriera politica di Joe Biden.
Proprio nelle stesse ore in cui usciva l'intervista, a Washington è andato in scena l'ennesimo psicodramma che ha coinvolto il presidente americano.
Nell'ambito dell'indagine che avrebbe portato, come nel caso di Trump, all'incriminazione di Biden per essersi portato a casa documenti riservati mentre era vicepresidente, il procuratore Robert Hur ha deciso di non incriminarlo perché ritiene sia "un uomo anziano ben intenzionato, con significativi problemi di memoria" e dunque non perseguibile da una Corte.
Biden per tutta risposta ha convocato una conferenza stampa per smentire con rabbia il report, ma commettendo un'altra gaffe: ha scambiato il presidente egiziano al-Sisi per il presidente del Messico.
Sui social e nell'opinione pubblica la spinta repubblicana sull'inadeguatezza di Biden sta montando alla grande, e ciò sta naturalmente producendo un immediato paragone tra lo stato di salute di Biden e quello di Putin, sancendo di fatto, a pochi mesi dalle elezioni USA, la sconfitta del candidato democratico.
Persino Repubblica è costretta a titolare così.
https://x.com/SavinoBalzano/status/1815639714411504110?t=Gfu1uF8Ia9wIGcnvWoxXnA&s=19
Cronache dal "centro", dal "polino", in poche battute: compreso che persino @CarloCalenda non lo si potrà menare ancora per il naso, tocca trovare un modo per portare la pagnotta a casa, in prospettiva.
All'esito del folgorante risultato delle europee, si dividono @matteorenzi e @marattin: lo zero virgola nulla da un lato e lo zero virgola niente dall'altro.
Prendere esempio da #Biden proprio no?
🇺🇸 Research group Marco Polo releases a 630-page report with 2,020 citations that thoroughly documents 459 crimes committed by the Biden family & their business associates.
•140 business crimes
•191 sex crimes
•128 drug crimes
Little media coverage ...
#Biden
Share and subscribe to American Majority