Установить свойства виджета в 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
🔥 Create your FIRST AA Smart Wallet on TokenPocket! #AccountAbstraction
✅ No seed phrase worries.
✅ Without Gas concerns.
✅ Easy-to-Use.
✅ Seamless decentralized experience.
Tutorial
👉https://tokenpocket-gm.medium.com/create-the-aa-wallet-on-tokenpocket-8132b4ed5d87
Download Your TokenPocket
👉https://www.tokenpocket.pro/
【Details】https://twitter.com/TokenPocket_TP/status/1722515584640856575
【Powered By】Crypto Box
📣Create the AA Wallet on TokenPocket_TP!
🫡 Ready for the next billion users to join Web3!
#AccountAbstraction is one of the best solutions to address the limitations of current EOA wallets, while also bringing more flexibility and operability to the Web3 wallets.
📱TokenPocket Android version now has launched AA Wallet, bringing more Web 3.0 possibilities to crypto users.
Here is the tutorial to guide you on how to start your AA journey on #TokenPocket!👇
https://medium.com/@tokenpocket-gm/create-the-aa-wallet-on-tokenpocket-8132b4ed5d87
🔥Ready your TokenPocket AA Wallet!
🚀Ready for the upcoming surprise for TP users!
【Details】https://twitter.com/TokenPocket_TP/status/1721907394614321592
【Powered By】Crypto Box
📣Create the AA Wallet on TokenPocket_TP!
🫡 Ready for the next billion users to join Web3!
#AccountAbstraction is one of the best solutions to address the limitations of current EOA wallets, while also bringing more flexibility and operability to the Web3 wallets.
📱TokenPocket Android version now has launched AA Wallet, bringing more Web 3.0 possibilities to crypto users.
Here is the tutorial to guide you on how to start your AA journey on #TokenPocket!👇
https://medium.com/@tokenpocket-gm/create-the-aa-wallet-on-tokenpocket-8132b4ed5d87
🔥Ready your TokenPocket AA Wallet!
🚀Ready for the upcoming surprise for TP users!
【Details】https://twitter.com/TokenPocket_TP/status/1721907267526877416
【Powered By】Crypto Box
🚀Bringing the next billion users into Web3! TokenPocket_TP
Account Abstraction has offered us a new path for advancement.
❓What is Account Abstraction?
❓How can it transform our Web3 experience?
Here's the ultimate beginner's guide to help you grasp and explore Account Abstraction to the fullest.👇👇
#AccountAbstraction#TokenPocket
https://tokenpocket-gm.medium.com/account-abstraction-e9cc59a7d6a3
【Details】https://twitter.com/TokenPocket_TP/status/1715310984003555418
【Powered By】Crypto Box
🚀 Exciting updates: UXLINK One account growth has exploded from 160K to 500,000+ in under 10 days! 💥
💰 Over 6,000,000 $UXLINK deposited as OAOG protocol’s universal gas
📈 Daily transactions: 10,000+ | Total transactions: ~1,000,000
This is what global community power looks like! 🌍✨ Thank you for trusting us to redefine #Web3.
Chain & account abstraction are revolutionizing user experiences—smoother, safer, and simpler for everyone.
As the world’s largest #Web3 social platform & infrastructure, we’re building the SOCIAL FOUNDATION for mass adoption.
💪The future is here—let’s shape it together! 🎉#UXLINK#MassAdoption#Web3Infrastructure#AccountAbstraction
🆕We just released TokenPocket’s New Version on Android. 🔺1.8.9🔺
🔵 Support AA Wallet. #AccountAbstraction
🔵 Support #Nostr Protocol on #Bitcoin Network and dogecoin Network.
🔵 Support Unisat’s new signature protocol.
🔵 Modify the signature verification for SuiNetwork.
🔵 Support Malaysian, Danish, and Hungarian.
👉http://tokenpocket.pro
#AAWallet#AccountAbstraction#TokenPocket
【Details】https://twitter.com/TokenPocket_TP/status/1721862534695936492
【Powered By】Crypto Box
🆕We just released TokenPocket’s New Version on Android. 🔺1.9.3🔺
1. The Market page supports #MEV Protection.
2. The Market page supports lifiprotocol
3. KeyPalWallet Hardware Wallet supports trondao Sign Message V2.
4. The Transfer page supports domain resolution for associated wallet addresses, including the #BTC Domain, #BTC Inscription Domain, #Eths Inscription Domain, and dotbitHQ domain.
5. Support #Permit transaction resolution.
6. Optimize signature management for trondao MultiSig wallets.
7. Optimize the user experience of AA wallets. #AccountAbstraction
👉http://tokenpocket.pro
【Details】https://twitter.com/TokenPocket_TP/status/1730851266912563295
【Powered By】Crypto Box
🚀 Ethereum's Upcoming Glamsterdam Upgrade Progresses Amid Development Challenges
Ethereum Foundation has released its latest development update, indicating steady progress in the upcoming Glamsterdam upgrade. According to Foresight News, while the implementation of ePBS (protocol-level PBS) is complex, the related development network is stabilizing, and the block-level access lists (BALs) development network is advancing smoothly. The current goal is to launch the first generalized Glamsterdam development network next week if the ePBS development network remains stable, followed by client releases, security audits, and test network testing. Additionally, EIP-7954, aimed at increasing the maximum contract size, is likely to be prioritized.
The subsequent Hegotá upgrade has selected FOCIL (EIP-7805) as the core feature for the consensus layer, while the proposal for account abstraction (AA), EIP-8141, remains in a pending introduction (CFI) status due to lack of consensus. Non-core feature proposals for Hegotá were initiated on April 9. Regarding the network gas limit, the current benchmark target is set at 60 million, with higher limit testing ongoing. As for the upgrade timeline, Glamsterdam is unlikely to go live in the second quarter, and the progress of Hegotá will largely depend on the completion of the former.
#Ethereum#Glamsterdam#ePBS#BALs#EIP7954#Hegotá#FOCIL#EIP7805#AccountAbstraction#EIP8141#Blockchain#Crypto#Upgrade#Development#ETH