Установить свойства виджета в 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
STON.fi Celebrates Successful Event in Tbilisi
#TON#Tbilisi#TONCommunity
At the recent meet-up in Tbilisi, STON.fi brought together the TON community with passionate discussions and showcases of innovative projects. The event, co-hosted by TON Georgia, highlighted the diversity of voices contributing to the growth of the TON ecosystem.
Source: link
@tonlines
🎧⤴
💎 Telegram’s Crypto Bot Launches Fee-Free Coin Swaps – Best Rates on TON and Beyond!
Telegram’s popular Crypto Bot introduced a groundbreaking Swap feature, enabling seamless exchanges of cryptocurrencies, including TON, at optimal market prices with 0% commission. This new feature empowers users to swap tokens effortlessly, catering to the needs of both seasoned traders and beginners. As Telegram strengthens its ties with The Open Network (TON), this development marks a significant step towards making zero-fee crypto trading more accessible and user-friendly. TON, Telegram, and crypto swaps headline this exciting update.
Chorus:
Swap it, drop it, no fees, we poppin’,
Crypto bot’s live, TON fam’s watchin’.
Best market rates, yeah, that’s the notion,
Zero percent, ridin’ this motion.
Verse 1:
Telegram’s bot, now it’s all in play,
Swappin’ TON coins without delay.
Zero fees stack, in a major way,
Crypto’s here to stay, what more to say?
Swipe right, the trades ignite,
Swappin' at the best rates, day or night.
TON on deck, the moves in sight,
Crypto bot’s game changin’, feelin’ right.
Chorus:
Swap it, drop it, no fees, we poppin’,
Crypto bot’s live, TON fam’s watchin’.
Best market rates, yeah, that’s the notion,
Zero percent, ridin’ this motion.
Verse 2:
From TON to ETH or BTC, quick like a flash,
One tap on Telegram, and the coins clash.
Zero fees givin' more green in the stash,
Crypto bot’s hustle, bringin’ in cash.
Telegram links up with TON,
Best swaps, no cap, just get it done.
In the market, bots always on the run,
Swappin’ coins, and we're havin' fun.
Chorus:
Swap it, drop it, no fees, we poppin’,
Crypto bot’s live, TON fam’s watchin’.
Best market rates, yeah, that’s the notion,
Zero percent, ridin’ this motion.
Verse 3:
Telegram and TON, now we’re connectin’,
Coins on the move, the fam’s respectin’.
Best rates, zero fees, no second-guessin’,
Crypto's risin', it's impressin'.
Swap so quick, it’s like a race,
Crypto bot's here, savin' time and space.
TON's in the mix, the market’s embrace,
With zero fees, everyone finds their place.
Chorus:
Swap it, drop it, no fees, we poppin’,
Crypto bot’s live, TON fam’s watchin’.
Best market rates, yeah, that’s the notion,
Zero percent, ridin’ this motion.
Bridge:
TON in the mix, we set the tone,
Zero fees, we break the stone.
Crypto bot's king on this throne,
This is the future, watch it be known.
#TONCommunity#CryptoSwap#TON
#TONCryptoNewsRapStyle
🎧@toncoin_rap
🙏SBT ONTON in real time!
🔍 Our chat has a bot that monitors the emergence of new SBTs in real time — they appear instantly along with passwords!
❤️ No need to search for them in different chats anymore - just join our community and get valuable Soul Bound Tokens to your wallet, so that you can get a drop for them later!
🟣Claim your SBT ONTON now!
#TON#ONTON#SBT#Airdrop#Web3#TONCommunity