Установить свойства виджета в 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
🪂New airdrop: Wrapped Bitcoin
🟢
💰 Reward: 5 #WBTC ($10)
👥 Referral: 10 $WBTC ($20)
🕰 Distribution: within 2 days
🔗Airdrop Link:https://t.me/WrappedBitcoinAirdropBot
-Complete all tasks of the airdrop
-Complete all tasks of the airdrop
-Submit your BSC wallet address
-For All Random lucky people
-The top 200 referrals can each get more WBTC tokens
Done ✅Done✅Done✅Done✅
⚠️Please remember: Only participate in completely free airdrops, never spend any penny for airdrop tokens
🚀 Major WBTC Investor Exits Position After 15 Hours with $12,000 Loss
An analyst @ai_9684xtpa posted on X that a significant investor, identified by the wallet address 0x0EA225f92408532403FbFE5357d5d94676F34a54, exited their position in Wrapped Bitcoin (WBTC) just 15 hours after entering. The investor initially purchased WBTC at a cost of $72,720.78, investing a total of $4.7 million. However, four hours ago, they sold 64.7 WBTC at $72,536, incurring a loss of $12,000.
#WBTC#Bitcoin#Crypto#Investment#Loss#Blockchain#Cryptocurrency
🟢شرکت دونالد ترامپ World Liberty Financial توکن های #ETH، #WBTC، #TRX، #AAVE، #LINK و #ENA را در 4 روز گذشته به قیمت 181،000،000 دلار خرید✔️
@ScorpionX_Co
Trump Family Crypto Project Moves Millions
The Trump family crypto project, World Liberty, executed a significant transaction today: exchanging 103.1493 WBTC for 3,075.198 ETH (approx. $9.9M) and 16.6199 WBTC for 1.7M USDT via Cow Protocol. Additionally, 11,917.635 ETH (valued around $38.4M) was transferred to Coinbase Prime.
Separately, $XRP has crossed a market cap of $155 billion.
Read more here.
#Trump#Crypto#WBTC#ETH#USDT#Coinbase#XRP#MarketCap#Blockchain#DigitalAssets#Investment#Finance#DeFi#CowProtocol#WorldLiberty#CryptoMarket#Altcoins#TokenExchange#CryptoTransactions#VC
😎The wrapped #BTC market has attracted close attention. Currently, #WBTC contributes a huge share to the #Ethereum#DeFi ecosystem. There are other options on the market. For example, #Coinbase and #Mantle announced the launch of #cbbc and #BBC. #BTCB, launched by #Binance, and #mBTC, launched by #Merlin, also have market sizes of $3.9 billion and $1.3 billion.
🦄#Uniswap вводит дополнительную комиссию в 0.15% за своп основных токенов через Интерфейс сайта uniswap.org
Очень последовательное убивание репутации Uniswap, после вброса про #KYC.
👑 На какие токены будет распространяться комиссия: #ETH , #USDC, #WETH, #USDT, #DAI, #WBTC, #agEUR, #GUSD, #LUSD, #EUROC, #XSGD
Knowledge Baze:
- Первое, что нужно знать пользователю в #DeFi, что фронтенд (сайт) проекта и протокол - это две разныe инфаструктуры. На сайте проекта можно сделать все что угодно и повесить любые комиссии, а на протоколе сделать ничего нельзя (ну кроме как взломать его);
- В случае с Uniswap есть два ЛПР - Uniswap Team (команда во главе с Hayden) и Uniswap Governance (ДАО протокола);
- Финансовые потоки и сами проекты никак не связаны друг с другом. Uniswap Team не имеет влияния на протокол, а только разрабатывает его новые версии и поддерживает сайт uniswap.org, а Uniswap Governance через токен и голосование может вводить комиссии и управлять самим протоколом.
Ситуация с комиссиями:
Uniswap Governance (DAO) уже давно пытается ввести комиссии на уровне самого протокола, для сбора доп.денег в токен UNI и treasury протокола. Постоянно обсуждаются такие инициативы, но дело с мертвой точки не двигается. Тут есть несколько проблем:
- комиссии, которые мог бы собирать протокол - крошечные и не повлияют никак на поддержку миллиардной капитализации $UNI токена;
- увеличивая комиссии протокола, провайдеры ликвидности начинают получать меньше дохода, что делает юнисвоп менее привлекательным чем другие DEX и может в долгосроке дать “капитальную течь”;
- нет налоговой регуляции в США для такого типа распределения в DeFi, это не дает возможности американцам правильно считать capital gain и taxes.
А вот как раз комиссий на фронтенде, которые забирает себе юрлицо Uniswap, как доход со свопов, ввести не представляет никакой сложности.
А что делают конкуренты:
🦄#1inch собирает комиссии используя новый инструмент Fusion (~0.5%)
🦊#Metamask в своих приложениях и расширениях собирает до 1% комиссий за своп - самый невыгодный курс обмена на рынке DEX, вообще не рекомендую там свопать
.. и не забываем про #MEV и сендвич атаки, которые иногда забирают до 100% комиссий с транзакции себе.
Как не платить DEXкомиссии в DeFi:
Самый простой и надежный способ - это использовать агрегатор HyperDEX, который работает напрямую через контракты #Uniswap (минуя любые доп.комиссии) и при этом дополнительно роутит ваши транзакции через пуллы различных дексов с наилучшей ликвидностью, что автоматически гарантирует вам лучший результат за своп.
Pro Tips:
Для защиты от MEV ботов и атак жетально использовать приватные RPC, например RPC от Ethermine и Flashbots. Устанавливаются вручную в ваш кошелек.
🔥 Рынок #DEX движется сейчас в двух направлениях - с одной стороны есть краткосрочные игроки, которые снижают комиссии и вознаграждают LP своими токенами (такие DEX в долгосрочной конкуренции всегда умирают) и есть #Uniswap который плавно внедряет комиссии и которые позволяют ему построить стабильный кеш флоу на долгие годы и пережить любых агресcивных конкурентов.