Установить свойства виджета в 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
A wallet linked to Joseph Lubin (@ethereumJoseph), Co-Founder of @ethereum and Founder of @Consensys, supplied 15,000 $ETH ($31.43M) to #MakerDAO and borrowed $4.1M $DAI.
In total, the wallet holds 137,908 $ETH ($287.29M) and has borrowed $107.77M $DAI.
https://intel.arkm.com/explorer/address/0xABED497D0CCB6916C95Dd98aD4402fEBf5f52FE7
https://x.com/OnchainLens/status/2019298159550427171
Follow @onchainlens for more onchain updates
Wallet 0xa58 (linked to Rune Christensen, #MakerDAO cofounder) has sold 2,235 $MKR for 4.542M $DAI at $2,032 on average in the past 2 days.
Currently, the wallet still holds 2,430 $MKR ($4.92M), and may keep selling.
The $MKR price has been down ~3.39% (2D), since the first sale.
Want to monitor the wallet, follow @spotonchain and turn on your 🔔 at https://platform.spotonchain.ai/en/profile?address=0xa5890ccd2359dc38f649158abdc24b62602dec68
🚨 A super early $MKR holder has sold after over 7 years!
- This holder bought 451.5 old $MKR in 2017 when the price was around $23 (the inception of $MKR)
- This holder just sold 251.5 $MKR ($408K) for 172.5 $ETH ~5 hours ago at $1,624 (x70)
#MakerDAO is down 24% since the rebrand to #Sky, partly due to market conditions and the criticism over its "freeze function".
👉 More Details: platform.spotonchain.ai/signal-details/super-early-holder-sold-the-first-25153-mkr-408k-after-over-7-years-168917
The $SHIB price soared over 50% (24H). What happened on-chain in the past 3 days leading to the pump?
1. Smart trader 0x37d withdrew 75.91B $SHIB (currently $1.51M) from #Binance 2 days ago before the pump, now making $614K (+69%).
👉 Address: 0x37dffd32ea5b23813a263f725759632c120e0ac7
2. #MakerDAO founder @RuneKek bought 7.41B $SHIB with 100K $USDC, allegedly for the first time 13 hours ago, now making $47.1K (+47.1%).
👉 Entity: Rune Christensen (MakerDAO founder)
3. Wallet 0x02e related to #Upbit has accumulated 2.13T $SHIB (now $42.3M) in the past 24 hours.
• Currently, the wallet is the 7th largest-holding wallet of $SHIB with 12.45T $SHIB ($247M).
👉 Address: 0x02e2201576fbbefb52812f2ee7f08eb4774b481e
Don’t forget to follow @spotonchain and turn on your alerts for more updates on $SHIB.
The $MKR price is surging for the second time, as affected by the #Endgame Launch announcement from #MakerDAO.
Whale 0xcf9 spent 1.94M $USDT to buy 702.8 $MKR at ~$2,763 around 30 mins ago.
👉 Address: 0xcf9bfaf7e7ed48d85f2487b8fed07852a5e93ad1
Moreover, the founder of MakerDAO, Rune Christensen (@RuneKek), also spent $4.57M to buy 1,967 $MKR at ~$2,324 in the past 7 days, now making $1.02M (+22.3%).
👉 Entity: Rune Christensen (MakerDAO founder)
Follow @spotonchain and turn on your 🔔 at the above addresses for more updates!
🗣 Новый день, новый 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] продолжение в следующем посте 🟢