Установить свойства виджета в 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
🔥 BingX $SING Fixed Savings is LIVE! 🚀
💰 Earn up to 200% APR by staking your $SING!
🏃♂️ Limited quota – subscribe now before it’s gone!
📅 Subscription Period: Now – Nov 24, 2024, 07:00 AM (UTC)
🔗 Start Staking: https://bingx.com/en/wealth/subscription?actId=&assetName=SING&productId=1374930318547673175&productType=1
⏳ Don’t miss out on this incredible earning opportunity!
#BingX#SingSing#Staking#CryptoEarnings
🔥 MetaGram: MGR Staking is LIVE
Stake your $MGR and earn up to 80% APR.
• Flexible lock terms: 7–365 days
• 0% platform fees while staking
• Trading pair: MGR/BNB (details soon)
👉Start now 👉👉👉👉👉👉👉👉
👉https://metagram.digital/staking
#MetaGram#MGR#DeFi#BSC#Staking#CryptoEarnings
🔥 MetaGram: MGR Staking is LIVE
Stake your $MGR and earn up to 80% APR.
• Flexible lock terms: 7–365 days
• 0% platform fees while staking
• Trading pair: MGR/BNB (details soon)
👉Start now 👉👉👉👉👉👉👉👉
👉https://metagram.digital/staking
#MetaGram#MGR#DeFi#BSC#Staking#CryptoEarnings
🔥 MetaGram: MGR Staking is LIVE
Stake your $MGR and earn up to 80% APR.
• Flexible lock terms: 7–365 days
• 0% platform fees while staking
• Trading pair: MGR/BNB (details soon)
👉Start now 👉👉👉👉👉👉👉👉
👉https://metagram.digital/staking
#MetaGram#MGR#DeFi#BSC#Staking#CryptoEarnings
🚀 USDC Holders May Face End of 4% Earnings Amid Legislative Push
PANews posted on X (formerly Twitter) that the days of earning a 4% return by holding USDC might be coming to an end. The American Bankers Association (ABA) has reportedly spent $56.7 million lobbying for the passage of the 'Clarity Act.' The primary aim of this legislation is to prevent users from obtaining returns similar to government bonds through stablecoin holdings. The banking sector's main concern is that if stablecoins can offer an annualized return of 4% to 5%, it could potentially impact up to $1.5 trillion in retail deposits.
#USDC#Stablecoin#ClarityAct#AmericanBankersAssociation#CryptoRegulation#CryptoEarnings#BankingSector#Legislation#RetailDeposits
🔥@CryptoDailyPrice – Your shortcut to daily crypto power! 💰
Get live price updates, learn pro trading tricks, and discover zero-investment earning hacks that actually work. 🚀
Stay tuned — every post drops something crucial, profitable, and mind-opening for crypto lovers like you! ⚡
#CryptoDailyPrice#CryptoUpdates#CryptoEarnings#CryptoTrading#CryptoTips#LearnToTrade#ZeroInvestment#CryptoForBeginners#DailyCryptoNews#PassiveIncome#CryptoSignals#CryptoMarket#CryptoProfit#StayTuned#EarnWithCrypto
💸 New Payment Received from Tonpick Faucet! 💸
💰 Hourly TON Faucet — Earn free TON easily!
✅ Claim faucet every 60 minutes
✅ Confirm your email to get 10 spins & 2X rewards for 24h
✅ Complete surveys for extra rewards
✅ Invite friends & earn 50% from their claims
💵 Min withdraw: only 0.1 TON
🌐 Join here:
https://tonpick.game/?ref=FREE_CRYPTO_TG
#TON#FreeTON#CryptoFaucet#CryptoEarnings#MakeMoneyOnline#Airdrop#FreeCrypto#PassiveIncome#WorkFromHome#CryptoRewards
---
💸 دفعة جديدة من Faucet Tonpick! 💸
💰 صنبور TON كل ساعة — اربح TON مجانًا بسهولة!
✅ المطالبة بالصنبور كل 60 دقيقة
✅ تأكيد بريدك الإلكتروني لتحصل على 10 دورات و ضعف الأرباح لمدة 24 ساعة
✅ إكمال الاستبيانات لربح إضافي
✅ دعوة الأصدقاء وربح 50% من أرباحهم
💵 الحد الأدنى للسحب: فقط 0.1 TON
سجّل الآن:
https://tonpick.game/?ref=FREE_CRYPTO_TG
#ربح_المال#كريبتو#TON#ربح_TON#ايردروب#PassiveIncome#ربح_مجاني#بوتات_تيليجرام#ربح_من_الانترنت