Установить свойства виджета в 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
HUMOR A LA DONALD TRUMP
NACH DEM ANSCHLAG - HILLARY CLINTON GEFESSELT AM BODEN
DONALD TRUMP AUF X, 26./27.04.
◼️ Links der Attentäter Cole Allen nach seiner Festnahme. Rechts eine Fake-Bild mit einer gefesselten Hillary Clinton. Verbreitet vom US-Präsidenten auf X. Derber Humor. Aber „Killary" wird wohl auch in Zukunft noch frei herum laufen. #USA2026
👉@RoyalAllemand
BLACKOUT AUF KUBA
KOMPLETTER STROMAUSFALL IN KUBA - 11 MIO. KUBANER OHNE STROM
KUBA, 16.03.
◼️Kuba meldet einen landesweiten, kompletten Stromausfall. Der staatliche Energieversorger versucht nach offiziellen Angaben, die Stromversorgung wieder herzustellen.#Kuba2026#USA2026
◼️ Kompletter Stromausfall auf Kuba👉https://insiderpaper.com/cuba-announces-total-electricity-blackout/
◼️ Das US-Ölembargo zeigt verheerende Wirkungen. Auch die staatliche Krankenversorgung ist kollabiert. Diesel für Notstromaggregate scheint nicht mehr vorhanden zu sein.
👉@RoyalAllemand
BOMBENSTIMMUNG IM WEISSEN HAUS
TRUMP DROHT ZERSTÖRUNG ALLER BRÜCKEN UND KRAFTWERKE AN
WASHINGTON D.C., 06.04.
◼️Ein gut aufgelegter Donald Trump spricht zum aktuellen Stand des Krieges und präzisiert sein Ultimatum an den Iran. Dem droht am Dienstag ein vernichtender Schlag gegen seine Verkehrs- und Energieinfrastruktur.#USA2026#POTUS2026#Iran2026
◼️„Wegen der Stärke unseres Militärs haben wir einen Plan in dem jede Brücke im Iran morgen Nacht um 24.00 Uhr zerstört ist, in dem jedes Kraftwerk „außer Betrieb" sein wird...." Und mit „außer Betrieb" meint Trump die „vollkommene Zerstörung".
◼️„Das wird über einen Zeitraum von vier Stunden geschehen, wenn wir es wollen. Aber wir wollen nicht, dass es so weit kommt." Vorher soll der Iran kapitulieren, gerne bedingungslos. Kriegsminister Pete Hegseth warnt später davor, seinen Chef zu unterschätzen.
◼️ Der Iran soll das Atomprogramm, die Raketen, seine Rohstoffe und die Macht im Land ausliefern. Und das wird er nicht tun.
👉@RoyalAllemand
PALANTIR REVOLUTIONIERT DEN KRIEG
DER FELDHERRNHÜGEL DES DIGITALEN ZEITALTERS - BEREITS IM EINSATZ?
USA, 12.03.
◼️Präsentation des „Maven Smart System" - Palantirs visualisiertes Kriegstheater in dem erkannte Ziele in den Workflow der Zerstörung gebucht und dann abgearbeitet werden. Das Pentagon wird bereits auf dieses System umgestellt.
#USA2026#Palantir2026
◼️ SCHON IM EINSATZ? ABER SICHER
Neben der Anfangs gezeigten künstlichen Militärinsel der Chinesen im Südchinesischen Meer sind weitere hier gezeigte Karten von Interesse. Das Pentagon arbeitet mit Palantirs Maven Smart System und diese Aufnahmen zeigen auch den Kriegschauplatz des #UkraineKonflikt2026 . Trotz der Bemühungen der US-Regierung, diesen Konflikt zu beenden, füttert man im Pentagon diesen workflow. Dito für #Iran2026.
◼️ Wie erdrückend dieses System ist zeigt auch sein Schulungsmaterial 👉https://www.rohde-schwarz.taipei/data/activity/file/1747214803878157618.pdf▫️على الرحب والسعة - gern geschehen
👉@RoyalAllemand
USA: WAFFENRUHE WIRD VERLÄNGERT
TRUMP IN DER SACKGASSE - KEIN ZEICHEN DER STÄRKE
USA/IRAN, 22.04.
◼️Die USA haben die Waffenruhe am Golf verlängert. Trotz markiger Sprüche des FOX-Redakteurs ist das kein Zeichen der Stärke oder der strategischen Klarheit. Der Iran verweigert Verhandlungen, die USA wollen eine nun fällige Abstrafung des Irans vermeiden. Warum?#USA2026#GolfkriegIran2026#Iran2026#Israel2026#IranUSA2026
◼️ Hier kann es mehrere Gründe geben, u.a. diese:
▪️ Bei angekündigten Angriffen auf Brücken und Kraftwerke dürfte es umgehend Massenkundgebungen vor Ort geben. Ein mögliches Blutbad würde die USA international isolieren.
▪️ Eine Aufklärung aktueller iranischer Kommandostrukturen war möglicherweise noch nicht erfolgreich.
▪️Die USA wollen massive iranische Raketenangriffe in der Region vermeiden.
▪️ Ein neuer Ölpreis-Schock soll vermieden werden, wenn es keine Garantie eines Erfolgs gibt.
◼️ Grundsätzlich ist die Reaktion der USA kein Zeichen der Stärke.
👉@RoyalAllemand
KRIEG KOSTET 2 MILLIARDEN PRO TAG
SPERRUNG DER STRASSE VON HORMUZ IST SELBST FOLGE DES US-ANGRIFSS
USA, IRAN, 25.03.
◼️Der demokratische Senator für den Bundesstaat Connecticut, Chris Murphy vor dem US-Senat. Der Abgeordnete versucht vergeblich, durch einen Gesetzentwurf zur Beendigung des Iran-Kriegs, den Konflikt zu beenden.#USA2026#GolfkriegIran2026#Iran2026#Israel2026#IranUSA2026
◼️ Die gesamte Rede Chris Murphys 👉https://youtube.com/watch?v=FEqxNa37_Sg&is=RPB43gtoymLZnvX_8h!:n?
◼️ Murphy zitiert die US-Medien, in denen die Sperrung der Strasse von Hormuz mittlerweile als Kriegsgrund genannt wird, also eine Sperrung, die es ohne den Angriff der USA auf den Iran gar nicht geben würde. Vor dem amerikanisch-israelischen Angriff auf den Iran war die Straße von Hormuz schließlich offen. Nun kostet der Krieg den USA 2 Milliarden („two billions") Dollar am Tag und könnte trotzdem zum Fiasko werden.
👉@RoyalAllemand