Установить свойства виджета в 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
ALERTE 🚨#TOGO
Dora Dougbedji, résidant à Aflao et travaillant à Lomé, a été enlevée le lundi 30 juin 2025 alors qu'elle prenait un zemidjan (taxi-moto) pour se rendre à son travail, avec son nourrisson de 5 mois. Deux jours plus tard, on a retrouvé sa trace sous la torture, aux mains des agents du régime, au SCRIC (Service chargé de la torture, de l'emprisonnement et de la disparition de ceux qui critiquent le régime). Pendant ce temps, ses deux autres enfants ont été laissés seuls à la maison. Le SCRIC aurait demandé à sa famille de venir récupérer le nourrisson de 5 mois.
Crime présumé : publications critiquant le régime de #FaureGnassingbé sur TikTok. Nous exigeons sa libération inconditionnelle ainsi que celle de tous les autres prisonniers politiques.
Au nom de la Ligue de Défense Noire Africaine et de la Brigade Révolutionnaire pour la Défense du Peuple, je lui exprime tout mon soutien et condamne fermement cette situation. Nous restons mobilisés pour la libération de notre chère patrie, le togo 🇹🇬
REJOIGNEZ LA RÉSISTANCE SUR TELEGRAM.
🔺Pour les numéros français : https://t.me/egountchibehanzinTV
🔻Pour les numéros internationaux : https://t.me/EgountchiBehanzinOfficiel
WhatsApp ➡️https://whatsapp.com/channel/0029VbB8HYgFnSzIMQZl0113
Pour ceux qui souhaitent soutenir notre initiative, notre lien PayPal 🙏🏾https://www.paypal.com/donate/?hosted_button_id=YH6EQEQUDY55E est toujours disponible. Merci pour votre générosité !
@egountchibehanzinTV
Inacceptable ! J'ai appris avec effroi qu'au Togo 🇹🇬, le régime sanguinaire dirigé par le dictateur cannibale de la pire espèce, #FaureGnassingbé a ordonné l'agression du député sénégalais Guy Marius Sagna, dans le cadre de sa mission parlementaire de la Cedeao lors d'une réunion avec la société civile togolaise à Lomé.
Ce dernier a été grièvement blessé, évacué en urgence à l'hôpital avec le visage ensanglanté et a reçu 7 points de suture.
Voilà comment fonctionne ce régime barbare allié de #Macron et soutenu par la #France🇫🇷: terreur, violence, et barbarie sont leurs seuls outils de gouvernance. Faure Gnassingbé a envoyé ses forces armées et des miliciens en civil pour brutaliser les participants à cette réunion organisée par le CDPA.
J'appelle tous les Togolais, Sénégalais et Africains, indépendamment de leurs convictions politiques ou religieuses, à dénoncer fermement cette agression barbare et criminelle. Le gouvernement sénégalais doit, sans délai, convoquer l'ambassadeur togolais à Dakar et imposer des sanctions appropriées contre le régime du Togo.
Au nom de la Ligue de défense noire africaine, je condamne avec la plus grande fermeté cet acte inqualifiable et exprime tout mon soutien à Guy Marius Sagna. Je lui souhaite un prompt rétablissement.
Egountchi Behanzin, Président international de La Ligue de défense Noire Africaine
@egountchibehanzinTV
Au #Togo🇹🇬, Pourquoi "Alain Faux-cas " @alainfoka2005 reste t’il silencieux sur l’arrestation et la mise en prison de son collègue journaliste togolais Apollinaire Mewenemesse par son patron le dictateur de la pire espèce #FaureGnassingbé ?
#FreeTogo#FaureMustGo
@egountchibehanzinTV
Le Togo 🇹🇬 est un camp de concentration, une prison à ciel ouvert, un pays en faillite dirigé par un chef mafieux, Faure Gnassingbé un sous-homme dictateur et cannibale de la pire espèce en Afrique de l’Ouest. Aidons et soutenons le peuple togolais à se libérer.
#FreeTogo#Fauregnassingbé#FaureMustGo#LiberonsLeTogo
@egountchibehanzinTV
ALERTE INFO | Au #Togo, en plein coup d’état constitutionnel du dictateur de la pire espèce #FaureGnassingbé, depuis deux semaines, des sources nous informent de l'arrivée massive d'un convoi militaire comprenant plus de 50 véhicules de guerre en provenance du nord du pays vers la capitale Lomé. Nos enquêtes révèlent que ces véhicules de guerre ont été acheminés et stationnés ce 2 avril 2024 dans la plate-forme industrielle d'Adétikopé (PIA), juste après le poste de péage de Davié. La panique s'installe parmi une partie de la population togolaise qui ne comprend pas ces manœuvres. Pourquoi le dictateur sanguinaire Faure Gnassingbé fait-il venir autant de véhicules de guerre du nord vers la capitale en pleine crise constitutionnelle ? Craint-il un soulèvement populaire ou un coup d'État de certains officiers de l'armée dans la capitale, comme les rumeurs qui circulent dans les casernes militaires depuis quelques jours ? Est-ce pour cette raison que Faure Gnassingbé ne dort plus à la présidence mais au Camp "RIT" et surtout à Niamtougou, comme nos sources nous l'ont confirmé ? Affaire à suivre.
Image: d’illustration
#FreeTogo#FaureMustGo#EgountchiBehanzin
@egountchibehanzinTV