Установить свойства виджета в 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
🔻 RT @60PlusAssoc: 60 Plus President @sanuzis said, “On behalf of more than five million senior citizen supporters we applaud Sen @tedcruz for introducing S. 275, the Retirement Freedom Act that will allow individuals to choose to opt out of the #Medicare part A benefit." https://t.co/YU2i7whWK8
June 24, 2021 at 07:52PM
via Twitter
@SenTedCruz
Donald Trump bragged that the U.S. is spending so much money on his war in Iran it has no funds to pay for daycare or healthcare. 💰⚔️
The 79-year-old president made the boast during a typically rambling speech while hosting an Easter lunch at the White House on Wednesday. 🦅🍽
“The United States can’t take care of daycare. That has to be up to a state,” Trump said. “We’re a big country. We have 50 states. We have all these other people, we’re fighting wars. We can’t take care of daycare. You’ve got to let a state take care of daycare, and they should pay for it too.” 🏛💼
“Medicaid, Medicare, all these individual things. They can do it on a state basis. You can’t do it on a federal [level]. We have to take care of one thing: military protection—we have to guard the country. But all these little things, all these little scams that have taken place, you have to let states take care of them.” 🎖🛡
#Trump#Medicare
👂More on Trump's Ear
⚠️
Summed AI Secures $500K Funding
Summed AI has raised $500K in funding to enhance its AI-driven platform that streamlines Medicare sales calls. The innovative technology allows users to access Medicare plan benefit details 90% faster, improving client enrollment and retention processes. For more information, visit Summed AI.
#Funding#AI#Medicare#Healthcare
🏥💸20 MILLION AMERICANS HIT BY HEALTHCARE "SUBSIDY CLIFF" — PREMIUMS DOUBLE OVERNIGHT
🔹 Congress failed to extend enhanced ACA subsidies expiring Dec 31 — families face 100%+ premium hikes starting January 2026 📈
🔹 Medicare Part B premiums jump $17.90/month to $202.90, eating away entire 2.8% Social Security COLA increase 💰
🔹 Social Security taxable earnings cap rises to $184,500 from $176,100 — higher earners pay more into system 📊
🔹 New senior tax deductions passed but millions may drop coverage entirely due to affordability crisis 🚨
Congress left 20 million hanging while pharma lobbies got their wins 😡🔥
#Healthcare#Medicare
@america
💥 Social Security and Medicare on the brink of disaster! 💔😢
Trust funds rapidly depleting, retirees in jeopardy 😱
Benefit cuts looming, up to 23% reduction! 💔💸
Healthcare access at risk, hospitals facing delays! 🏥😷
Presidential candidates must address this crisis! 🗳️🤔
Bipartisan solutions needed, time is running out! ⏰🤝
Fiscal commission proposed for comprehensive action! 💪💼
Let's save these vital programs for future generations! 🙏🌍
#SocialSecurity#Medicare#RetirementCrisis#BipartisanSolutions
https://www.foxbusiness.com/politics/social-security-trust-fund-path-insolvency
Subscribe to @BadVolfNews
#The_Barron's 🇺🇸📕[PDF]⬇️
3 #November2025
#Weekly_Magazines
For learning, for free(dom).
@backupofmagazines
Barron’s says Boeing is back, as new leadership tackles years of crises. A warning on “crypto-treasury” firms shows #Bitcoin risk. #Meta’s AI buildout has flaws, while funds that track #Buffett surge. Don’t count out the #Jobs market; the classic 60/40 portfolio is hot again. Features span medical devices, housing-broker disruption, dividend diversification, and mortgage #REITs. Global angles include Gulf states’ #AI push and Argentina’s reform shot. Columns debate #Fed signals, tech overspending, and Musk’s trillion-dollar gambit, plus strategies to lower #Taxes and a key #Medicare to-do for retirees. #Stocks#Markets#Investing#Boeing#Economy#ETFs