Установить свойства виджета в 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
Wenn draußen die Kälte🥶 kommt, bringen wir den Sommer☀️ auf die Leinwand📺: das Komödiendrama „Erster Sommer” wird am 19. November um 19:00 Uhr in russischer Sprache mit englischen Untertiteln gezeigt.
🎞️ Der 15-jährige Sascha lebt in einer Kleinstadt an der Wolga, und dieser Sommer wird sein Leben verändern. Gemeinsam mit seinen Freunden startet er ein kleines Geschäft, um sich eine Sony PlayStation🎮 leisten zu können. Das Haus des Nachbarmädchens wird plötzlich zum Mittelpunkt seiner Aufmerksamkeit, und auf der Sommerdisco💃🏻 kommt es zur ersten handfesten Auseinandersetzung. Während er erwachsen wird, lernt Sascha den Wert anderer Leben kennen, erlebt Schmerz und Verlust und steht vor Entscheidungen, die alles andere als kindlich sind.
🗣️Der Film wird vom Produzenten Denis Kovalevsky vorgestellt.
FSK: 18+
📲Anmeldung ist erforderlich.
#kino#berlinevents#drama#komödie#sommer#film
Wenn draußen die Kälte🥶 kommt, bringen wir den Sommer☀️ auf die Leinwand📺: das Komödiendrama „Erster Sommer” wird am 19. November um 19:00 Uhr in russischer Sprache mit englischen Untertiteln gezeigt.
🎞️ Der 15-jährige Sascha lebt in einer Kleinstadt an der Wolga, und dieser Sommer wird sein Leben verändern. Gemeinsam mit seinen Freunden startet er ein kleines Geschäft, um sich eine Sony PlayStation🎮 leisten zu können. Das Haus des Nachbarmädchens wird plötzlich zum Mittelpunkt seiner Aufmerksamkeit, und auf der Sommerdisco💃🏻 kommt es zur ersten handfesten Auseinandersetzung. Während er erwachsen wird, lernt Sascha den Wert anderer Leben kennen, erlebt Schmerz und Verlust und steht vor Entscheidungen, die alles andere als kindlich sind.
🗣️Der Film wird vom Produzenten Denis Kovalevsky vorgestellt.
FSK: 18+
📲Anmeldung ist erforderlich.
#kino#berlinevents#drama#komödie#sommer#film
Am 20. Januar um 19:00 Uhr wird die Familienkomödie „Das Feld der Wunder“ in russischer Sprache gezeigt.📽️
🌞 Jeden Sommer versammelt sich eine Gruppe von Kindern in ihrem geheimen Versteck mitten zwischen den hohen Maisstängeln eines alten Ferienorts. Es kursiert die Legende von den Schätzen einer Fürstin, die vor Napoleon geflohen ist, und der Traum vom Abenteuer wird Wirklichkeit, als die neue Schülerin Katja auftaucht: ihr Vater, ein Geschäftsmann, plant, das Feld zu kaufen, um dort einen Baumarkt zu errichten. Die Kinder schließen sich zusammen, um ihren heiligen Ort zu verteidigen.
Meldet euch an und kommt ins Filmtheater im Russischen Haus vorbei!🫶🏻
#kino#komödie#familienfilm#sommer#jugend#kindern
DasKrimidrama „Der Sommer kommt“, das bei großen Filmfestivals mehrmalsausgezeichnet wurde, wird am 29. Januar um 19:00 Uhr im Russischen Haus in Berlin gezeigt!
🎬 Der Film erzählt die Geschichte eines jungen Mannes namens Nikita, der aus der Provinz nach Moskau kommt. Er mietet ein Zimmer, lernt seine Mitbewohnerin kennen und verstrickt sich in eine komplizierte Beziehung. Durch einen Freund erfährt er von einem reichen Typen namens Dan. Der Film greift Motive aus der Welt des Verbrechens, moralische Entscheidungen und deren Auswirkungen auf das Leben der Protagonisten in der Großstadt auf. Die Geschichte spielt vor dem Hintergrund sozialer Unterschiede und innerer Widersprüche, die für das moderne Stadtleben charakteristisch sind.
🎞️Die Vorführung findet im Rahmen des Internationalen Filmfestivals ARCTIC OPEN in russischer Sprache mit englischen Untertiteln statt.
🖇️ FSK: 18+
📲Anmeldung
#filmfestival#kino#drama#krimi#sommer#berlinkino
Am 20. Januar um 19:00 Uhr wird die Familienkomödie „Das Feld der Wunder“ in russischer Sprache gezeigt.📽️
🌞 Jeden Sommer versammelt sich eine Gruppe von Kindern in ihrem geheimen Versteck mitten zwischen den hohen Maisstängeln eines alten Ferienorts. Es kursiert die Legende von den Schätzen einer Fürstin, die vor Napoleon geflohen ist, und der Traum vom Abenteuer wird Wirklichkeit, als die neue Schülerin Katja auftaucht: ihr Vater, ein Geschäftsmann, plant, das Feld zu kaufen, um dort einen Baumarkt zu errichten. Die Kinder schließen sich zusammen, um ihren heiligen Ort zu verteidigen.
Meldet euch an und kommt ins Filmtheater im Russischen Haus vorbei!🫶🏻
#kino#komödie#familienfilm#sommer#jugend#kindern