Установить свойства виджета в 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
¡Ya es oficial! ✅
🔴 El #PlanB de reforma electoral contempla la reducción de salarios a funcionarios electorales 🇲🇽👏🏻👀
https://revistaelpolitico.com/nacional/publican-plan-b-reforma-electoral-dof/
Trader #PlanB expressed an interesting idea about how future large ETFs provide themselves with Bitcoins:
"ETFs, in my opinion, such as #BlackRock, are currently loading $BTC through miners, not through exchanges. Buying #BTC directly on exchanges will affect the price too much. An indirect purchase from miners will affect the hashrate, but not the price. This can explain the current hashrate explosion"
¡No más privilegios! ❌💰
🔴#Sheinbaum celebró que el #PlanB ya es constitucional enlistando los 6 logros de esta ley que sigue haciendo llorar a la oposición 🗳️👏🏻
Tsss… 😱
🔴 Luego de la postura en contra del #PlanB de Sheinbaum, los mexicanos disminuyeron su confianza en el #PT🔥‼️👇🏻
https://sinlineamx.com/voto-de-pt-contra-plan-b-representa-ruptura-con-morena/
¡Necios, pero necios! 🙄
🔴 A pesar de que muchos mostraron descontento por la decisión, el #PT sigue insistiendo en no hacer cambios a la iniciativa del #PlanB enviada desde el Senado 🤬🇲🇽🗳️
https://revistaelpolitico.com/nacional/pt-aprobara-plan-b-si
Lo bueno es que no querían perder votos 😅
🔴 ¿Cómo crees que le vaya al #PT en 2027 tras la polémica con el #PlanB? 🤔👇🏻
https://sinlineamx.com/tunden-pt-por-eliminar-revocacion-mandato-plan-b/
¿Se consumó una nueva traición? 🤔
🔴 El #PT jugó del lado del McPRIAN y tumbó la revocación de mandato con una reserva al #PlanB🙄 | Así se vivió la sesión 👇🏻
https://sinlineamx.com/revocacion-de-mandato-queda-fuera-plan-b-pt/
¡Y siguen! 🙄
🔴 Ahora resulta que el #PT solo posó para la foto y dio un falso respaldo al #PlanB de #Sheinbaum😡📄🔍
https://sinlineamx.com/pt-niega-acuerdo-definitivo-morena-sobre-plan-b/
Аналитик PlanB ожидает, что после халвинга курс биткоина достигнет $100 000 в 2024 году, а на пике в 2025 году — $300 000.
Он считает, что текущий цикл ничем не отличается от предыдущих и заявил, что лучшая стратегия — покупка биткоина за 6 месяцев до халвинга и продажа через 18 месяцев.
При таких прогнозах курс Крипто Индекса WBT может достигнуть цены в 5 usdt.
Сегодня самое время докупиться.
#халвинг#мнение#PlanB
PlanB Shifts Funds to Crypto ETFs
Crypto analyst PlanB has transitioned his capital from Bitcoin savings to spot ETFs based on digital gold, deeming it a rational progression towards Bitcoin adoption. His move sparked mixed reactions within the community, with some viewing it as a mistake. Meanwhile, BNB Chain's team is optimizing transaction processing for meme coins following updates aimed at increasing the validator's capacity to process transactions efficiently. Recent judicial developments involving Binance and the SEC may also be influencing market dynamics.
#Crypto#Bitcoin#ETF#BNBChain#SEC#MemeCoins#PlanB