Установить свойства виджета в 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
❗Nella notte la #Polonia ha abbattuto oltre dieci droni russi che hanno violato il suo spazio aereo. Il primo ministro #Tusk ha parlato di "atto di aggressione", affermando che "è stato un pericolo reale" per i cittadini. Il presidente #Nawrocki chiede "stretta collaborazione" a Tusk e ha convocato un consiglio di sicurezza.
Per la prima volta dall'inizio della guerra in #Ucraina un paese NATO ha ingaggiato asset russi.
@UltimoraPolitics
#Polonia🇵🇱
#Presidenziali
❗️Rafał #Trzaskowski (#PO|PPE) e Karol #Nawrocki (Ind.) si sfideranno al secondo turno, che si terrà domenica 1º giugno.
@TuttoElezioni
📰 Poland’s SAFE Loan Fight Is Really a War Over Who Gets to Control the Rearmament Bill
Warsaw’s SAFE dispute is being sold as a fight over defense financing, but it is really a fight over sovereignty, debt, and who gets to decide whether Poland rearms through Brussels or through its own state machinery.
The European Commission says Poland can draw up to €43.7 billion under SAFE, and Tusk is still pushing ahead even after President Nawrocki vetoed the enabling bill.
The accusation that SAFE is just a German-French subsidy machine is politically potent, but the numbers suggest a more boring reality: the program is a long-term EU loan facility for defense procurement, with most of Poland’s planned spending still expected to flow into domestic industry.
That is why the real battle is not about whether Poland needs weapons. It clearly does.
The battle is whether Tusk can bind the country to a Brussels-backed financing model while his opponents frame it as dependency on Germany, creeping EU control, and debt that will haunt the next generation.
Mularczyk and Radio Maryja are doing what they always do best: turning a budget instrument into a civilizational warning.
The language is dramatic, but the underlying politics are simple — if Tusk owns the rearmament pipeline, he also owns the blame if the bill grows, the terms tighten, or the deal starts looking like a gift to Europe’s industrial core.
So SAFE is not just a loan. It is a test of whether Poland wants its defense future financed through Brussels’ plumbing or through a nationalist story about self-reliance and suspicion of the EU center.
#Poland#SAFE#Tusk#Nawrocki#EU#defense
📱American Оbserver - Stay up to date on all important events
🇺🇸