Установить свойства виджета в 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
❓Do you want to build a #dApp on Venom❓
✅ Join the VenomBlockchain dev community on Discord
➡️https://discord.gg/E5JdCbFFW7
🔎 Check Venom docs with development guides for smartcontracts, tokens, NFT, and more
➡️https://docs.venom.foundation/build/development-guides
⚡️TON Community: MyTonWallet v3.6 Features Unveiled
#TON#Dapp
The TON Community introduces MyTonWallet v3.6 with significant updates. Users can now track any wallet address and view $TON activity within the app, and share transfer links before confirmation. Discover new features like Remember Passcode and Dapp Action Previews.
Source: link
@tonlines
🆕We just released TokenPocket's new version on iOS. 🔺2.4.8🔺
🔵Support Boost Mode. 🚀#memecoin
🔵Native support for #DApp Content Translation.
🔵Native support for TRON Batch Transfer.
You can now upgrade your TokenPocket on the App Store. Ensure the developer is 'TP Global Ltd'.
🔗https://tokenpocket.pro
🆘 Просто эпический фейл от WalletConnect, который я обнаружил сегодня утром.
#WalletConnect - крупнейший (и возможно единственный) сервис подключения крипто кошельков к #dapp#web3 приложениям внес Украину и РФ в черный список.
По сути это парализует работу всего DeFi для СНГ. Вот такая децентрализация или иначе - отсутствие альтернатив “не из США”!
🍌
30 million users in Bitget Wallet!🌐
Bitget Wallet is a cutting-edge Web3 multi-chain wallet that offers a comprehensive platform with wallet, exchange, NFT marketplace, DApp browser, and Launchpad features. Supporting over 100 public blockchains, Bitget Wallet aggregates top DEXs and NFT markets to provide users with the best trading prices.
Bitget Wallet's mission is to create a world-class decentralized crypto wallet that provides a secure and convenient trading experience for all crypto enthusiasts.
Since its founding in May 2018, Bitget Global Inc. has been providing secure asset storage, fast trading, exchange, and investment in DeFi to over 30 million users worldwide. Now it is not just a wallet but an entire ecosystem that provides access to various activities and airdrops.
Tomarket Airdrop
Bitget On Chain Fund Invests in Tomarket App, Fast-Growing Web3 Game on TON. Airdrop scheduled for September.
Join the farming and get 2,000 🍅 $TOMATO tokens at the start!
Download Bitget Walletand start your Web3 journey now!🚀💎
#BitgetWallet#Web3#NFT#TON#DApp#DEX
🆕 0xMantle Bridge now fully supports TokenPocket login, and the official bridge is also listed on the TokenPocket #Mantle Hot #DApp List!
👉https://bridge.mantle.xyz/
🔥You can access Mantle Bridge with your TokenPocket wallet and enjoy the #MantleJourney!
👉https://extension.tokenpocket.pro/#/
👉https://www.tokenpocket.pro/en/download/app
#TokenPocket#MantleJourney
【Details】https://twitter.com/TokenPocket_TP/status/1711686131371413918
【Powered By】Crypto Box
🆕 Mantle Bridge now fully supports TokenPocket login, and the official bridge is also listed on the TokenPocket #Mantle Hot #DApp List!
🔥You can access Mantle Bridge with your TokenPocket wallet and enjoy the #MantleJourney!
👉https://extension.tokenpocket.pro/#/
👉https://www.tokenpocket.pro/en/download/app
#TokenPocket#MantleJourney
【Details】https://twitter.com/TokenPocket_TP/status/1711685010049368156
【Powered By】Crypto Box
😼Catizen Mini Game Center Open Beta now LIVE!🚀🎮
👌 Dive into a world of top-tier games that blend fun with innovative earning opportunities. Enjoy exclusive rewards like game airdrops and referral bonuses.
👌 Earn a 10% top-up rebate from all your referrals across all games, including Catizen!
Don’t miss out — start your adventure in the Catizen Mini Game Center today! 🌟
🔡
🔡
🔡 Open beta is live! Report bugs or game feedback to earn 300 Catizen FishCoins 🪙
😸Explore Catizen Mini Game Center
#catizen#gamee#play#p2e#web3#gamefi#dogs#telegram#dapp#notcon#hamsetr