Установить свойства виджета в 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
#Israele
Ministro della Giustizia Yariv #Levin (#Likud|ECR): “Come membro del Likud, rispetterò la decisione del Primo Ministro sulla riforma della giustizia. Lo affermo in piena consapevolezza del fatto che la situazione possa condurre al crollo del governo e dello stesso partito Likud.”
@OsservatorioEsteri
#Israele
Il premier #Netanyahu (#Likud|ECR) ha annunciato di aver revocato il decreto con cui aveva disposto le dimissioni del Ministro della Difesa Yoav #Gallant (#Likud|ECR): “Abbiamo avuto delle divergenze, ma Gallant rimane nella sua posizione.”
@OsservatorioEsteri
#Israele#Gaza
Ynet riporta che alti funzionari dell'Ufficio del Primo Ministro Benjamin #Netanyahu (#Likud|ECR|PfE) hanno dichiarato che "la tregua è stata rotta, occuperemo completamente la Striscia di Gaza. Ci saranno anche attività nelle aree in cui sono tenuti gli ostaggi. La decisione è stata presa: Israele occuperà la Striscia di Gaza. #Hamas non rilascerà altri ostaggi senza la resa completa, non ci arrenderemo. Se non agiamo ora, gli ostaggi moriranno di fame e Gaza rimarrà sotto il controllo di Hamas."
@OsservatorioEsteri
#Israele#Gaza
Il Primo Ministro israeliano Benjamin #Netanyahu (#Likud|ECR) ha annunciato che i combattimenti continueranno: “Non siamo pronti ad accettare una situazione in cui i battaglioni di #Hamas escono dai loro bunker, riprendono il controllo di Gaza e tornano a minacciare i cittadini di Israele negli insediamenti circostanti, nelle città del sud, in tutte le parti del paese
Pertanto, Israele non accetterà le richieste di Hamas, che significano la resa, e continuerà a combattere finché tutti i suoi obiettivi non saranno raggiunti".
@OsservatorioEsteri
#Israele#Palestina
Premier Benjamin #Netanyahu (#Likud|ECR): "Siamo in una guerra, non in un'operazione. #Hamas ha lanciato un attacco omicida a sorpresa contro lo Stato di Israele e i suoi cittadini. Ho ordinato innanzitutto di ripulire gli insediamenti dai militanti infiltrati e ho ordinato una mobilitazione su larga scala delle riserve. Il nemico pagherà un prezzo senza precedenti."
@OsservatorioEsteri
#USA#Israele
Il Presidente Joe #Biden (#D|Centro-sinistra) ha avuto un colloquio telefonico con il Primo Ministro israeliano Benjamin #Netanyahu (#Likud|ECR). I due leader hanno discusso della situazione a Gaza, e Biden ha sottolineato che "gli attacchi contro gli operatori umanitari e la situazione umanitaria complessiva sono inaccettabili".
La Casa Bianca fa sapere che Biden abbia chiarito la necessità che Israele "annunci e attui una serie di passi specifici, concreti e misurabili per affrontare i danni civili, le sofferenze umanitarie e la sicurezza degli operatori umanitari".
Inoltre, Biden ha affermato che la politica degli Stati Uniti "rispetto a Gaza sarà determinata dalla nostra valutazione dell'azione immediata di Israele su questi passi", sottolineando che un cessate il fuoco immediato "è essenziale per stabilizzare e migliorare la situazione umanitaria e proteggere i civili innocenti".
@OsservatorioEsteri
#USA#Israele#Iran
Il Presidente Joe #Biden (#D|Centro-sinistra) ha detto al Premier israeliano Benjamin #Netanyahu (#Likud|ECR) durante una telefonata che gli Stati Uniti non sosterranno alcun contrattacco israeliano contro l'Iran, ha dichiarato ad Axios un alto funzionario della Casa Bianca.
@OsservatorioEsteri
#CPI#Israele
La Corte Penale Internazionale ha emesso mandati d'arresto per il Primo Ministro Benjamin #Netanyahu (#Likud|ECR) e l’ex ministro della Difesa Yoav #Gallant (Likud) per crimini di guerra e crimini contro l'umanità.
@OsservatorioEsteri
#Israele#ONU
Ministro degli Esteri Israel #Katz (#Likud|ECR): "Oggi ho deciso di dichiarare il Segretario generale dell'ONU Antonio #Guterres una persona non desiderata in Israele e di vietargli l'ingresso in Israele. Coloro che non sono in grado di condannare senza ambiguità l'attacco criminale dell'Iran contro Israele, come hanno fatto quasi tutti i paesi del mondo, non sono degni di calpestare il suolo israeliano. Si tratta di un segretario generale che non ha denunciato il massacro e i crimini sessuali perpetrati dagli assassini di Hamas il 7 ottobre, e non ha portato a decisioni che li dichiareranno organizzazione terroristica. Un segretario generale che dà una spinta ai terroristi, stupratori e assassini di Hamas, Hezbollah, gli Houthis, e ora la nave madre del terrorismo globale, l'Iran, sarà ricordato come una macchia nella storia dell'ONU. Israele continuerà a proteggere i suoi cittadini e manterrà il suo status nazionale e la sua dignità con o senza Antonio Guterres."
@OsservatorioEsteri
#Israele
È stato raggiunto un accordo tra il Premier Benjamin #Netanyahu (#Likud|ECR) e l'ex Ministro della Difesa Benny #Gantz (#NUP/#BaW|Centro) per la formazione di un governo d'emergenza nazionale.
@OsservatorioEsteri
#Israele
Il partito #BaW|Centro, che esprime Benny #Gantz e Gazi #Eisenkot nel gabinetto di guerra israeliano, ha presentato una proposta per sciogliere la #Knesset.
La coalizione di unità nazionale tra BaW e il #Likud|ECR sia avvia a volgere al termine.
@OsservatorioEsteri
#Israele
La maggioranza di governo è stata sconfitta nel voto decisivo della #Knesset per selezionare il componente politico chiamato a far parte del Comitato per la selezione dei giudici. A causa di dissidi interni alla coalizione, ad essere stata eletta è la parlamentare di #YA|Centro Karine #ElHarrar, votata anche da qualche esponente della maggioranza.
Solo 11 voti, contro i 58 di ElHarrar, per Tali #Gottlieb (#Likud|ECR).
@OsservatorioEsteri