Установить свойства виджета в 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
💡Идея в долгую.
Покупать и накапливать #COSMOS по любым ценам ниже 10$ и все делегировать в стейкинг через Kepler по 10-15% годовых.
Разделегировать и продать когда цена будет 100$.
❗️Не инвестиционная рекомендация. Это то, что я делаю сам.
Tether USDt comes to the #Cosmos ecosystem! We have chosen to deploy USDt on Kava, the gateway to the Cosmos ecosystem. USDt on Kava is launching on July 3rd.
Read more https://tether.to/en/tether-token-usdt-to-launch-on-kava
#OKT
Нашел интересную торговую идею, с большим потенциалом.
Все вы знаете такую биржу как OKX, у нее есть два токена:
- OKB - это нативный токен биржи, который дает скидки на комиссии и прочие бонусы.
- ОКТ - это коин их собственного чейна, реализованного на базе #COSMOS
Я посмотрел их Web3 кошелек, встроенный прям в биржевое приложение OKX и могу сказать, что делают они очень крутые продукты и решения и адаптированные в том числе под русскоязычную аудиторию.
Вполне вероятно, что биржа сможет продвинуть свой чейн, потому что у нее для этого есть все ресурсы и возможности.
Технические сигналы на покупку вижу такие:
- максимальная цена была в районе 250$, сейчас 13.5$ (-95% от хая)
- конвергенция по индикаторам
- длительное накопление с середины 2022 года
В общем я купил ✅
🌎 Some distant planets, called rogue planets, drift through space unattached to any star. Astronomers estimate there could be billions of these planets in our galaxy alone. ✨
#astronomy⚡#exoplanets⚡#cosmos
👉subscribe Interesting Planet
👉more Channels
Hello ;
Testnet Prop #18 passed 🎉 Validators can now join the two Cronos Chain data pools on our testnet Kaon!
🤝 This testnet integration of @cronos_chain, the first blockchain that interoperates with both #Ethereum & #Cosmos ecosystems, was an easy decision & great next step forward in our mission to empower Cosmos ecosystem builders & participants, as well as start providing trustless data to other ecosystems. Join the data pools & learn more ⤵️
https://x.com/KYVENetwork/status/1717953703830065260?s=20
We’re also hosting DevNite with DoraHacks & archwayHQ in Lisbon! 🥂
A special get-together for partners, builders, Web3 enthusiasts, & more at The Block Lisboa on Nov. 4th. Join us ⤵️
https://x.com/KYVENetwork/status/1717915199972454409?s=20
We’re joining Interop, Cerulean Ventures, and ChorusOne in hosting Interchain Magic Nights tomorrow in Barcelona!
Going to be a fun night of cocktails, tapas, & chats around the growing ecosystems of #Cosmos & #Avalanche🙌
For those in Barcelona this week, learn more ⤵️
https://twitter.com/KYVENetwork/status/1653750988577144833
MIT Scientists Plan to Use Massive Laser to Attract Aliens to Earth
Using extremely powerful lasers, scientists want to try and contact aliens located as far as 20,000 light years away. #Cosmos#Nature#Earth - https://curiosmos.com/mit-scientists-plan-to-use-massive-laser-to-attract-aliens-to-earth/