Установить свойства виджета в 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
🚨🚨Celsius' wallet 0x4A87 received 428,105 $ETH ($784M) unstaked from #Lido Finance 10 hrs ago.
➡️ Lido Finance transferred the full amount of $ETH 22 hours after Celsius's request.
➡️ There are 274 $stETH left pending to be withdrawn in the Lido withdrawal queue.
⚠️ Keep an eye on Celsius's next move with this substantial amount of available $ETH.
👉 Addresses:
1. Celsius 0x4a87
2. Lido withdrawal queue
🌟 A savvy trader, who once amassed millions profit, just moved 1,901 $ETH at $1,826($3.47M) to #Binance 14 hours ago.
➡️ Previously earned an estimatedprofit of $2.06M (ROI: 25%).
➡️ This latest trade yielded a modest $20K profit.
🤔 Speculation arises that the ability to convert $stETH to $ETH from #lido v2 may have influenced his decision.
👉 More details: https://twitter.com/spotonchain/status/1658728334367551489
🗣 Новый день, новый Governance Voting в котором я принимаю участие, прокачивая свои DAO скиллы и неся свободу и децентрализацию в наш бренный #Web3 мир. Этот 2023 год можно точно назвать #bullrun для всех децентрализованных protocol governance и #DAO. Вся интеллектуальная активность в сети, аирдропы и пользователи сейчас здесь.
База: большие протоколы/блокчейны управляются сообществом владельцев токенов и их делегатами. Делегат - это пользователь (кошелек) у которого может и не быть токенов протокола, но он получил делегацию "голосов" от других участников и может теперь представлять их интересы при голосовании за предложения (чем-то похоже на депутата от народа).
Процесс #DAO следующий:
- активный участник делает детальное предложение и выносит его на обсуждение. Место: форум проекта.
- после обсуждения проекта, предложение выносится на голосование оффчейн (без проведения транзакции, а только с помощью отправки подписи). Место: snapshot.org
- после принятие предложения на snapshot оно переносится уже на onchain голосование и после исполняется. Место: tally.xyz
Основные задачи управления ДАО - это обновление протокола (экономические параметры), перенос протокола на новую сеть (лицензионные параметры), управление казначейством (распределение нажитого имущества или токенов проекта в целях поощрения сообщества протокола). В частных случаях это еще и координация управления операционной, юридической и политической активностью протокола.
Список #DAO в которых я не последний человек принимаю участие:
- Uniswap $UNI - Forum / Snapshot [treasury - $1.5B]
- Arbitrum $ARB - Forum / Snapshot [treasury - $2.8B]
- Optimism $OP - Forum / Snapshot [treasury - $1.5B]
- Frax $FXS - Forum / Snapshot [mcap - $1.4B]
Далее в моем списке: #Lido, #AAVE, #Straknet, #MakerDAO
… [ч1] продолжение в следующем посте 🟢
Trump Family Spends Big on Crypto
The Trump family crypto project, World Liberty Financial (WLFI), made significant moves in the crypto market:
- Purchased 10.61 million TRX for 2.65 million USDT.
- Acquired 3,079 ETH for 10 million USDC.
- Converted and staked 4,700 ETH into stETH via Lido, totaling 14,701.58 ETH worth about $49 million.
Check more details here: Onchain Lens.
Additionally, the SEC has rescinded the controversial accounting guidance SAB 121 that affected Bitcoin custody by banks. More insights at Leviathan News and The Block.
#Crypto#Bitcoin#SEC#TRX#ETH#USDC#Ethereum#WorldLibertyFinancial#Lido#stETH#Trump#SAB121#Accounting#Finance#USD#WhaleAlert#USDT
Major ETH Transfer and Lido V3 Launch
🚨 29,250 #ETH (~$77.8M) transferred from #Binance to an unknown wallet, according to Whale Alert. In other news, Lido has launched V3 with customizable ‘stVaults,’ enhancing Ethereum staking flexibility. More details can be found here.
🔍 Analysts from Merkle Science report that in 2024, investors lost over $500M due to fraud linked to meme tokens, primarily through social engineering attacks on platforms like X and YouTube.
📈#HongKong now recognizes $BTC and $ETH for investment visa applications, positioning itself as a competitive hub for crypto investors.
💰 DeFi platform Legend has secured $15M from Andreessen Horowitz and Coinbase Ventures.
Stay informed! 🔗Lido V3 Announcement
## Keywords: #ETH#Lido#Binance#Crypto#MemeToken#HongKong#BTC#VC#DeFi#Legend#InvestmentVisa#WhaleAlert#Fraud#SocialEngineering#Ethereum#Investment#CryptoNews#Blockchain#Finance#CryptoInvestors#DecentralizedFinance
#ETH#Lido#Binance#Crypto#MemeToken#HongKong#BTC#VC#DeFi#Legend#InvestmentVisa#WhaleAlert#Fraud#SocialEngineering#Ethereum#Investment#CryptoNews#Blockchain#Finance#CryptoInvestors#DecentralizedFinance