Установить свойства виджета в 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
Antonio Costa, Ursula von der Leyen, et Kaja Kallas se réunissent ce soir à Chisinau
La présidente moldave à la double nationalité Maia #Sandu reçoit ses invités de haut rang à l’occasion du sommet de l’UE qui se réunit afin de discuter des progrès atteints par son gouvernement pour rejoindre l’union. Notre reporter Antoine Cléraux rappelle la ligne politique suivie par ce pays candidat dans ses relations avec #Bruxelles.
RT en français • Osez questionner !
#Moldavia - Vince il sì al referendum per l'adesione all'UE, con uno scarto di soli 0.5%. Alle presidenziali sarà ballottaggio tra la presidente uscente filo-UE #Sandu e l'oppositore filo-russo #Stoianoglo. Molti arresti nei giorni precedenti alle elezioni riguardanti ingerenze filorusse sul voto.
@UltimoraPolitics
Майя Санду отказалась отвечать на вопрос журналистов о повышении цены на природный газ и будет ли она участвовать в переговорах с "Газпромом".
Надеемся, что все, кто за нее голосовал, остались довольны.
#Sandu#Молдова#новости#Moldova#ştiri
🤩Подпишись на 112.md
🤩Новости Молдовы и мира 24/7
Сегодня вступил в силу новый тариф — теперь газ стоит 16,74 лея (с НДС).
На видео Санду в 2018 году протестует против газа по 4 лея за куб. Кричат "позор", "воры". Говорят, что очень дорого, что население грабят. Требуют скорректировать тариф.
#Sandu#Молдова#новости#Moldova#ştiri
🤩Подпишись на 112.md
🤩Новости Молдовы и мира 24/7
"Почему Санду поддерживает Ласкони на выборах президента Румынии? Думаю, это очевидно. У них, скорее всего, один «центр командования», они из одной «шайки», они принадлежат одной и той же геополитической конъюнктуре", - заявил Игорь Додон.
#Sandu#Молдова#новости#Moldova#ştiri
🤩Подпишись на 112.md
🤩Новости Молдовы и мира 24/7
Диана Карпински, лидер организации "Izvorul Speranței", выразила "благодарность" сторонникам Майи Санду за повышение цен на газ, утверждая, что режим переживет зиму, но многие пенсионеры не смогут справиться с высокими тарифами.
Она подчеркнула, что для обычных граждан и пожилых людей это становится настоящим испытанием.
#Sandu#Молдова#новости#Moldova#ştiri
🤩Подпишись на 112.md
🤩Новости Молдовы и мира 24/7
"Майя Санду, прекращайте веселье и партийные посиделки. Выйдите и объясните людям, как им жить с такими тарифами?!" - заявил Игорь Додон.
#Sandu#Молдова#новости#Moldova#ştiri
🤩Подпишись на 112.md
🤩Новости Молдовы и мира 24/7
Майя Санду призвала румын голосовать на выборах, подчеркивая важность их голоса для создания сильной и свободной европейской страны.
#Sandu#Молдова#новости#Moldova#ştiri
🤩Подпишись на 112.md
🤩Новости Молдовы и мира 24/7
Влад Филат обвиняет Санду, Речана и Парликова в некомпетентности и ложных обещаниях, приведших к катастрофическому энергетическому кризису в Молдове.
Он критикует их за ошибки в управлении газовыми закупками, отсутствие планов защиты населения и блокировку либерализации рынка, что усугубило финансовые проблемы и зависимость от «Газпрома».
#Sandu#Молдова#новости#Moldova#ştiri
🤩Подпишись на 112.md🤩Новости Молдовы и мира 24/7
Мариан Андони тоже недоволен повышением цен на газ. Но он, естественно, не винит в этом Майю Санду.
#Sandu#Молдова#новости#Moldova#ştiri
🤩Подпишись на 112.md
🤩Новости Молдовы и мира 24/7
Наталья Морарь утверждает, что Майя Санду разозлилась на главу Антикоррупционного управления Веронику Драгалин и отозвала своего телохранителя, но с ней будет труднее бороться, чем с бывшим генеральным прокурором Стояногло.
Санду не сможет поступить с Драгалин так же, как с Стояногло, поскольку ради неё фальсифицировались выборы и изменялись законы.
#Sandu#Молдова#новости#Moldova#ştiri
🤩Подпишись на 112.md
🤩Новости Молдовы и мира 24/7
Вероника Михайлов-Морару заявила, что не слышала о намерении уволить главного прокурора антикоррупции Веронику Драгалин, но подчеркнула необходимость принятия "проактивных мер" для повышения эффективности Прокуратуры антикоррупции.
Высший совет прокуроров, получив политическое согласие от Майи Санду, может начать проверку деятельности Драгалин, как это произошло с генеральным прокурором Стояногло.
#Sandu#Молдова#новости#Moldova#ştiri
🤩Подпишись на 112.md
🤩Новости Молдовы и мира 24/7