Установить свойства виджета в 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
#Adoption
Мосбиржа запустит фьючерсы на монеты Solana, Ripple и Tron в 2026 году — РБК
В 2026 году Мосбковская биржа планирует запустить три новых криптоиндекса, которые будут отражать динамику монет Solana, Ripple и Tron, а также три фьючерса на эти бенчмарки. Кроме того, торговая площадка рассматривает возможность запуска вечных фьючерсов на основные криптовалюты — биткоин и Ethereum.
#Adoption
Банки в России смогут работать с криптой по новым правилам.
Центробанк отправил в правительство концепцию, признающую криптовалюты валютными ценностями — их можно будет покупать и продавать через банки, биржи и брокеров, но запрещено использовать для платежей внутри страны. Законы планируют принять к июлю 2026 года, а ответственность за нелегальные операции введут с 2027 года.
Bugun, 10-dekabr — O‘zbekiston Respublikasining Davlat madhiyasi qabul qilingan kun
🇺🇿 Davlat madhiyasi - milliy g‘ururimiz, faxrimiz, istiqbolimiz va istiqlolimiz timsoli. Birdam va mustaqil O‘zbekistonimiz ramzi. Madhiyamiz bong urib yangraganda qalbimizni to‘lqinlantiruvchi faxr va iftixor hissi doimo sizga kuch-g‘ayrat bag‘ishlab tursin!
🇺🇿O‘zbekiston Respublikasining Davlat Madhiyasihaqidagi qaror 1992-yilning 10-dekabrida Oʻzbekiston Respublikasi Yuqori Kengashining 11-chaqirig‘ida qabul qilingan.
🔖 Oʻzbekiston xalq shoiri Abdulla Oripov soʻzi, Oʻzbekiston xalq bastakori Mutal Burhonov musiqasi.
#GraduateSchool#Anthem#Adoption#Uzbekistan
🔝Web-site |🔝Facebook | 🔝Instagram | 🔝Youtube
Bitwise: “$1 million per BTC by 2029 is our base case.” — Andre Dragosch
#Macro#Adoption#Web3#BTC
#Crypto#比特币#区块链#以太坊
尋找更多即時海外區塊鏈資訊?
Telegram必备的搜索引擎极搜,帮你精准找到,想要的群组、频道、视频、音乐👇
The Dima Yakovlev Law was signed by President Putin on December 28, 2012. It bans Americans from adopting Russian children. The law responded to the US Magnitsky Act and is named after a Russian boy who died after adoption in the US. 🇷🇺🚫👶🇺🇸
[Read more]
@googlefactss#DimaYakovlevLaw#Russia#Orphans#Adoption
Bitcoin's Nation State Adoption Threat Insights
Andreas Antonopoulos revisits concerns about nation state adoption of Bitcoin. Highlights the risks of government intervention impacting Bitcoin’s decentralization and the broader cryptocurrency ecosystem. Importance of maintaining Bitcoin’s integrity emphasized amid evolving regulations. For detailed insights, check the full explainer link.
#Bitcoin#Crypto#VC#Decentralization#Regulation#Adoption#Governments#Security
US Senator Proposes Bitcoin Payment Bill
Oklahoma Senator Dusty Deevers introduces "the Bitcoin Freedom Act," allowing workers to receive their salaries in Bitcoin. This legislation could promote cryptocurrency adoption in the state. 🔗Read more
#Bitcoin#Crypto#Legislation#US#BitcoinFreedomAct#Adoption#Oklahoma
[19 Jan to 25 Jan] DWF Crypto Snapshot
Our latest #crypto report by DWF Labs Managing Partner Andrei Grachev is up.
Check out this week's round up 💫
💠 Bitcoin May See Its Largest #Adoption With Brazil And Argentina #Currency Merger
💠 Vitalik Buterin Addresses Potential #Privacy On Ethereum With Stealth Addresses
💠Ethereum Developers Stress-Test #Network In Anticipation Of ETH Withdrawals
💠DWF Labs Unmask The Potential Of Mask Network With US$5 Million Investment
💠Bridge #Protocols Rise To Prominence With Increased #L2 Solutions Activity
💠SUSHI #Community Stands By The Platform And Gives Up Short Term Gains
💠It’s The Battle Of The Ethereum Scaling Solutions
💠Improved Inflation Sentiment Paves The Way For Female #Crypto Adopters
💠Say Hello To The Future Of #Blockchain-Based Crowdfunded Films
Full read here.
Missed last week's snapshot? Read here.
Follow us on Medium here.
Stay up-to-date on the latest DWF Labs updates:
Website| Twitter | Linkedin | Telegram