Установить свойства виджета в 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
💬Commentaire du directeur général de Rosatom Alexeï #Likhatchov sur la situation à la centrale nucléaire de Zaporojié et à Énergodar
« Pour le troisième jour consécutif, nous constatons une activité très intense de l’armée ukrainienne à Énergodar, une des villes les plus importantes pour Rosatom. Il s’agit de frappes visant les infrastructures urbaines, notamment la station de distribution de gaz et des zones résidentielles. Avant-hier, plus de 20 explosions ont été enregistrées. Cinq voitures ont brûlé et un véhicule de pompiers a été gravement endommagé », a déclaré Alexeï Likhatchov.
⏺ Selon lui, plusieurs impacts ont visé directement le bâtiment de l’administration municipale. Un des drones kamikazes a frappé l’entrée du sous-sol qui sert d’abri antiaérien aux employés de la mairie. À la suite de l’explosion, un générateur diesel et une voiture garée à proximité ont pris feu. Du 30 avril au 3 mai, la ville a subi une coupure totale d’électricité en raison de dommages causés aux équipements électriques de la région. Le 5 mai, l’approvisionnement en électricité a été entièrement rétabli.
« Des installations de la centrale de Zaporojié ont également été attaquées. Le samedi 2 mai, un drone a frappé le bâtiment du laboratoire de suivi des radiations. Il n’y a pas eu de victimes. Nous enregistrons presque quotidiennement des frappes sur la sous-station électrique "Radouga", ce qui rend les travaux de réparation impossibles », a-t-il souligné. « Nous avons déclaré à maintes reprises que prendre pour cible une centrale nucléaire est un geste totalement irresponsable de la part des autorités ukrainiennes. Dans toute centrale de Rosatom, la sécurité des installations est une priorité absolue », a ajouté Likhatchov.
RT en français • Osez questionner !
ℹ️Le site de la centrale nucléaire de Bouchehr en #Iran reprend progressivement ses activités : environ 2 200 employés sont déjà revenus sur le chantier.
C’est ce qu’a annoncé le directeur général de Rosatom, Alexeï #Likhatchov. Selon lui, la situation reste globalement calme et le nombre de travailleurs iraniens continue d’augmenter.
Il a ajouté que la centrale se tenait prête à une mobilisation rapide et au retour complet de son personnel en République islamique dès que les risques de reprise des hostilités seront écartés.
RT en français • Osez questionner !
🔵Ursula von der Leyen a récemment reconnu que la plus grande erreur était de renoncer à l’énergie nucléaire en #Europe.
Alexeï #Likhatchov, directeur général de Rosatom, a pris cette nouvelle avec le sourire.
RT en français • Osez questionner !
💬Le 21 avril, Alexeï #Likhatchov, directeur général de la société d'État Rosatom, a effectué une visite de travail en #Turquie.
« La priorité absolue de la société publique Rosatom est de procéder au démarrage du premier réacteur de la centrale nucléaire d’Akkuyu, de connecter l’unité au réseau et de fournir la première électricité », a-t-il souligné dans son discours.
RT en français • Osez questionner !
❗️La situation à la centrale nucléaire de #Bouchehr en Iran continue de se détériorer en raison des bombardements, a déclaré Alexeï #Likhatchov.
Un projectile a explosé pour la troisième fois près d’une station de pompage qui assure notamment l’approvisionnement en eau des équipements du réacteur, ce qui constitue une menace directe pour la sûreté nucléaire, a souligné le chef de Rosatom.
RT en français • Osez questionner !
⏺Entre mémoire de #Tchernobyl et « fièvre atomique »
À l’occasion des 40 ans de la catastrophe de Tchernobyl, Alexeï #Likhatchov, directeur général de #Rosatom, insiste sur les leçons tirées de ce désastre, présenté comme un tournant majeur pour la sûreté nucléaire, et rend aussi hommage aux liquidateurs.
Cet événement a conduit à une transformation profonde du secteur : renforcement des normes, développement de systèmes de sécurité passifs et réduction drastique du facteur humain dans la gestion des centrales. La filière russe repose désormais sur des principes de sécurité inconditionnels, tout en intégrant les technologies les plus avancées.
Dans ce contexte, Moscou plaide pour une adaptation des règles internationales afin d’accompagner les nouvelles technologies, tout en s’appuyant sur l’expérience acquise depuis une autre catastrophe, celle de Fukushima.
RT en français • Osez questionner !