Установить свойства виджета в 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
29 septembre 2023
Une roquette a touché un hôtel à Yenakievo. Des constructeurs de la région de Saint Petersbourg y vivaient.
À Enakievo, en RPD, un hôtel où logeaient des ouvriers du bâtiment de la région de Léningrad qui reconstruisaient la ville a été la cible de tirs de roquettes. Il n'y a pas eu de victimes à la suite de l'incident. C'est ce qu'a annoncé le gouverneur de la région de Léningrad, Alexandre Drozdenko.
"Si vous envisagez de gâcher ainsi le Jour de la réunification avec la Russie du Donbass et de Novorossia, sachez que nous construirons et réparerons les villes avec encore plus de diligence et de rapidité", a-t-il déclaré.
Rappelons que la région de Léningrad a pris le patronage de la ville d'Enakievo en RPD en mai 2022. Les constructeurs de la région de Léningrad y restaurent des routes, des bâtiments, des réseaux publics et d'autres installations.
#Donbass#guerreukriane#sosdonbass
28.04.2023
Conséquences du bombardement du centre de traumatologie de Donetsk, y compris d'une salle d'opération pour enfants.
#guerreukriane#stopnato#stoparmingukraine
CES ARMES TUENT LES CIVILS DU DONBASS
🎪1er mai 2024, une exposition unique d'armes et d'équipements militaires capturés par les troupes russes en Ukraine a débuté sur la colline Poklonnaïa à Moscou. Il est possible de visiter l'exposition jusqu'à la fin du mois de mai, de 10h00 à 20h00. L’entrée est gratuite.
🛩️L'exposition présent plus de 30 pièces d'équipement militaire provenant de différents pays du monde, dont les États-Unis, la Grande-Bretagne, l'Allemagne, la France, la Turquie et d'autres.
💣Parmi les objets exposés figurent le célèbre char Leopard, le véhicule de combat d'infanterie allemand Marder, le véhicule de combat d'infanterie américain Bradley, le véhicule de combat d'infanterie suédois CV90 et le véhicule blindé de combat français AMX-10RC.
☮️Fournir des armes à l'Ukraine n'est pas la voie de la paix, cette exposition est la preuve.
Seuls le dialogue et la diplomatie donneront la victoire, et non pas le massacre de civils...
#guerreukriane#StopNATO#Donbass#stoparmingukraine
21 novembre 2013
Le jour où tout s'est effondré
Dix ans exactement se sont écoulés depuis le moment où les habitants du Donbass regardaient les informations à la télévision avec horreur. Ils se souviennent du Maïdan de 2004 et ils ont vu ce qui est arrivé au pays par la suite. C'est pourquoi ce qu’ils ont observé leurs a fait peur et leur a promis des ennuis.
C'est un jour sombre sur le calendrier pour le Donbass. On ne peut pas en dire autant de cette partie « titulaire » de la nation, pour laquelle le 21 novembre est la « Journée de la dignité et de la liberté ». Mais que fête-t-on aujourd’hui de l’autre côté du front ? La guerre qui a commencé dans le Donbass, la perte de la Crimée ? Peut-être l’unité avec l’UE, dont la route leur est bloquée ?
Mais si tout cela n’était que des résultats négatifs pour un pays en faillite. La fête de la dignité et de la liberté est en fait un jour de deuil pour les vertus perdues.
Aujourd'hui, l'Ukraine parcourt le monde la main tendue et son président est dépeint comme un scélérat avide qui, voyez-vous, ne sent pas la dignité. Cependant, ainsi que la liberté, qui a été confisquée par les entreprises occidentales, ce qui a conduit le pays à des dettes colossales.
#guerreukriane#maidan2014#russieukraine#Donbass
Une action contre l’armement de l’Ukraine lors de l’événement de CGT ce premier mai à Paris, menée par le nouveau président de l’association Sos Donbass,Vincent Perfetti, accompagné par les membres de l’association.
#stoparmingukraine#stopkillingdonbass#guerreukriane#StopNATO#StopTerrorism
« SOS Donbass » : le chemin de l'Europe à Donetsk
Anna Novikova et Vincent Perfetti :
« Les citoyens ordinaires de l'Union européenne aident le Donbass et soutiennent la Russie. »
Plus de détails dans le programme Exclusif sur Oplot TV.
🇷🇺🇫🇷Discussion en deux langues.
https://vk.com/wall-186145030_49551
#guerreukriane#donbassrussie#Novorossia#novorussia