Регулярно приходится писать и ревьюить код, где используется PySide2-6.
Заметил, что в подавляющем большинстве случаев настройка создаваемых базовых виджетов происходит через методы. Думаю, всем знаком такой способ.
Простой пример с кнопкой:
button = QPushButton("Click Me")
button.setMinimumWidth(300)
button.setFlat(True)
button.setStyleSheet("font-size: 20pt")
button.setToolTip("Super Button")
button.clicked.connect(lambda: print("Button clicked"))
Но есть и альтернативный способ - настройка через свойства. Это просто ключевые аргументы конструктора класса. Хоть они и не указаны в документации как аргументы, но они есть)
Этот код делает тоже самое но с помощью Property
button = QPushButton(
"Click Me",
minimumWidth=300,
flat=True,
styleSheet="font-size: 20pt",
toolTip="Super Button",
clicked=lambda: print("Button clicked"),
)
Где это может быть полезно
▫️ Это выглядит более аккуратно и коротко, уже повод использовать
▫️ Может использоваться в заполнении лейаута, когда нам не нужно никакое другое взаимодействие с виджетом и поэтому сохранять его в переменную не требуется. Например, лейбл или кнопка.
widget = QWidget(minimumWidth=400)
layout = QHBoxLayout(widget)
layout.addWidget(QLabel("Button >", alignment=Qt.AlignRight))
layout.addWidget(QPushButton("Click Me", clicked=lambda: print("Button clicked")))
widget.show()
Либо так
widget = QWidget(minimumWidth=400)
layout = QHBoxLayout(widget)
for wd in (
QLabel("Button >", alignment=Qt.AlignRight),
QPushButton("Click Me", clicked=lambda: ...)
):
layout.addWidget(wd)
widget.show()
▫️ Можно хранить настройки в каком-то конфиге или генерировать на лету, после чего передавать как kwargs.
kwargs = {"text": "Hello " * 30, "wordWrap": True}
my_label = QLabel(**kwargs)
Как получить полный список доступных свойств?
Эта функция распечатает в терминал все свойства виджета и их текущие значения
def print_widget_properties(widget):
meta_object = widget.metaObject()
for i in range(meta_object.propertyCount()):
property_ = meta_object.property(i)
property_name = property_.name()
property_value = property_.read(widget)
print(f"{property_name}: {property_value}")
#tricks#qt
#Italia
Domani prenderà il via il congresso di #A1MDP|S&D, dove parteciperanno Letta, Conte, Orlando, Di Maio, Landini e Calenda. Non è stato inviato invece Matteo Renzi, poiché, secondo #Scotto, Italia Viva si è collocata col centrodestra.
@UltimoraPolitics
https://x.com/SavinoBalzano/status/1971129589729562929?t=lFhJPoIZlMv1Vvnt_O9B3Q&s=19
Guardate questi 60 secondi di video e ditemi se in questo Paese non c’è un problema democratico grande come un grattacielo.
Ci si indigna per il mancato sostegno del governo alla #GlobalSumudFlotilla, ma appena fai notare che anche #Mattarella resta in silenzio, subito scattano l’imbarazzo, i balbettii, la prudenza.
Insomma: attaccare #Meloni o #Salvini va bene (lasciamo perdere #Tajani che ormai non lo possono vedere manco i 300 dipendenti della Farnesina), ma guai a toccare il Presidente della Repubblica.
Eppure, tra le imbarcazioni colpite sembra ce ne fossero anche alcune battenti bandiera italiana, il nostro tricolore.
Il Capo dello Stato rappresenta l’unità nazionale, lo dice l’articolo 87 della Costituzione. E allora? Pensa come siamo ridotti.
In diretta dalla #Flotilla, l’onorevole #Scotto ci spiega che #SergioMattarella non è tenuto a intervenire. Avrà pensato lo stesso quando ha paragonato la #Russia al Terzo Reich?
Se c’è un potere che non si può criticare, la democrazia non esiste: fatevene una ragione. E se certi silenzi li condannate e altri li giustificate, la vostra battaglia perde autorevolezza e credibilità.
100 punti in meno al GrifonSergio.
#BattitoriLiberi: dal lunedì al venerdì alle 17, con Gianluca Fabi, su Radio Cusano.
Il Presidente della Camera #Fontana comunica le seguenti censure con interdizioni ai lavori del parlamento dopo i fatti sfociati nell'aggressione a #Donno: 15 giorni a Igor #Iezzi (#Lega); 7 ad #Amich (#Fdi), #Cangiano (#Fdi), #Forgiuele (#Lega), #Mollicone (#Fdi) e #Stumpo (#Pd); 4 a #Donno (M5S); 3 ad #Amendola (#Pd) e 3 a #Candiani (#Lega); 2 a #Scotto (#Pd) e 2 a #Stefanazzi (#Pd). (Dire)
@UltimoraPolitics