Установить свойства виджета в 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
HOY #viernes 12/12/2025 estaré en la @universidade_usc en #SantiagoDeCompostela, participando en una conferencia sobre la #UniónEuropea, organizada por @JDemocraticaES en la Facultad de Derecho. A partir de las 17:00.
A la 16:30 galleguistas izquierdistas exaltados nos quieren impedir la charla. Venid a vernos que será muy interesante, y apoyadnos ♥️
Les esperamos 💪
#Europa#Armesilla
¿Por qué EEUU quiere el petróleo venezolano? Para que China no se lo quede y para que Venezuela no comercie su petróleo en yuanes. Trump teme la desdolarización del mundo, y más aún de su patio trasero. Nicolás Maduro ha sido capturado por la DEA de Estados Unidos para sacar a China de Venezuela. Ni democracia, ni derechos humanos. Geopolítica.
#armesilla#nicolasmaduro#venezuela#donaldtrump#petroleo#china#geopolitica
El 3 de enero de 2026 el #hispanismo político ha muerto de manera irreversible. Toca denunciar a aquellos que enarbolan la bandera de la Cruz de Borgoña mientras tapan con ella la de #EEUU.
Mi artículo en @La_Iberofonia
#DonaldTrump#Venezuela#NicolasMaduro#Iberofonia#armesilla
Enlace: https://laiberofonia.com/la-irreversible-muerte-del-hispanismo-politico/
#Vox intentó controlar #Revuelta pero estos no se han dejado, por ahora. Lo que empezó como una trifulca por dinero y poder puede desembocar en una escisión política e ideológica que, si desde @vox_es no la logran reconducir, podría llevar a @revuelta_es a convertirse en una alternativa política seria con importante presencia en la calle. ¿Estás de acuerdo? Te leo en comentarios.
#armesilla#politica#actualidad#españa
Año 2026: Más de 1 millón de personas en España vive en la Calle. No hay vida más dura que esta. Incluso muchos indigentes tienen trabajo pero no tienen un hogar. Imagina lo que supone dormir en un cajero, debajo de un puente, en un banco o protegido por mantas y cartones, y llevar todo lo que tienes en mochilas o carros. Algunos han desarrollado enfermedades mentales debido a esta vida tan dura, o ya las padecían y se han agravado debido a ello. Mientras tú vuelves a tu casa de una fiesta de Nochevieja, o te levantas bajo un techo rodeado de tu familia, o incluso en soledad, piensa en lo afortunado que eres por no padecer la que es, sin duda, la forma de vida más difícil que existe. #armesilla#pobreza#indigencia#España#politica#actualidad
Hay un tipo de inmigración de la que nadie habla y que también contribuye a la elevación del precio de la vivienda en España, así como de los alquileres: la inmigración que llega del centro y norte de Europea. Mientras algunos se centran en los que tienen la piel oscura, nadie se fija en cómo los rubios de ojos azules de Alemania, Países Bajos, Inglaterra, Francia, etc., se están haciendo con viviendas para sí y sus clanes, al tiempo que lo hacen de la mano de fondos de inversión en vivienda de EEUU, Reino Unido, pero también China, Qatar, Arabia Saudí y Emiratos Árabes Unidos, que son los que les facilitan el acceso. Para que luego nos llamen racistas, no se trata de racismo. Se trata de sobreexceso de demanda y muy poca oferta porque no se construye. Estamos preparando un vídeo largo sobre el problema de la vivienda, en que se verá que es un problema multicausal. #Atentos👀#armesilla#inmigracion#vivienda#españa#especulacioninmobiliaria#europa#racismo#politica#actualidad