Установить свойства виджета в 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
🇲🇱Assimi #Goïta a dirigé, ce 4 mai au palais de Koulouba, la cérémonie mensuelle du lever des couleurs, véritable symbole de la souveraineté malienne.
Des collaborateurs immédiats du président et des chefs de service dépendant de la présidence étaient présents à l’événement.
RT en français • Osez questionner !
💬 « À l'heure où je vous parle, le dispositif est renforcé, la situation est maîtrisée »
– Assimi #Goïta s’est adressé à la nation au sujet des attaques terroristes survenues au Mali le 25 avril.
Crédit vidéo : ORTM
RT en français • Osez questionner !
🇲🇱Assimi #Goïta a dirigé, ce 4 mai au palais de Koulouba, la cérémonie mensuelle du lever des couleurs, véritable symbole de la souveraineté malienne.
Des collaborateurs immédiats du président et des chefs de service dépendant de la présidence étaient présents à l’événement.
RT en français • Osez questionner !
🔴Le discours du président Assimi #Goïta à la nation après les violentes attaques terroristes a été accueilli avec émotion dans le pays. Les précisions avec Nouhoun Kané.
RT en français • Osez questionner !
🗣« Les opérations se poursuivront jusqu'à la neutralisation complète des groupes impliqués et le rétablissement durable de la sécurité sur l'ensemble du territoire national »
– Assimi #Goïta.
Crédit vidéo : ORTM
RT en français • Osez questionner !
💬 « Ces attaques ne sont pas des faits isolés. Elles s'inscrivent dans un vaste plan de déstabilisation conçu et exécuté par les groupes armés terroristes et les sponsors internes et externes »
– Assimi #Goïta.
Crédit vidéo : ORTM
RT en français • Osez questionner !
💬 « À l'heure où je vous parle, le dispositif est renforcé, la situation est maîtrisée »
– Assimi #Goïta s’est adressé à la nation au sujet des attaques terroristes survenues au Mali le 25 avril.
Crédit vidéo : ORTM
RT en français • Osez questionner !
🟢Le deuxième jour de la visite d’État du dirigeant malien Assimi #Goïta en #Russie a été marqué par une rencontre avec des représentants de la diaspora malienne.
Les détails avec notre reporter, Antoine Cléraux.
RT en français • Osez questionner !
🇲🇱Mali : Visite du président de la Transition aux blessés et hommage au général Sadio #Camara
Le président de la Transition, le général Assimi #Goïta, s’est rendu au CHU Bocar Sidi Sall de Kati après les attaques simultanées à Kati, Bamako, Mopti, Gao et Kidal. Il y a rencontré les blessés civils et militaires, salué le personnel médical et exprimé ses encouragements, tout en leur souhaitant un prompt rétablissement.
Il s’est ensuite recueilli au domicile du général Sadio Camara, décédé le 25 avril lors de ces événements. Le chef de l’État a présenté ses condoléances à la famille et réaffirmé la détermination des autorités à poursuivre son engagement pour la sécurisation du territoire national.
Crédit photos : AES INFO
RT en français • Osez questionner !
🇲🇱Mali : Visite du président de la Transition aux blessés et hommage au général Sadio #Camara
Le président de la Transition, le général Assimi #Goïta, s’est rendu au CHU Bocar Sidi Sall de Kati après les attaques simultanées à Kati, Bamako, Mopti, Gao et Kidal. Il y a rencontré les blessés civils et militaires, salué le personnel médical et exprimé ses encouragements, tout en leur souhaitant un prompt rétablissement.
Il s’est ensuite recueilli au domicile du général Sadio Camara, décédé le 25 avril lors de ces événements. Le chef de l’État a présenté ses condoléances à la famille et réaffirmé la détermination des autorités à poursuivre son engagement pour la sécurisation du territoire national.
Crédit photos : AES INFO
RT en français • Osez questionner !
🟢Assimi #Goïta a salué la synergie d'action au sein de l’#AES et la qualité de la coopération avec les partenaires stratégiques de son pays, notamment la #Russie.
Crédit vidéo : ORTM
RT en français • Osez questionner !