Установить свойства виджета в 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
#Fidel sobre Chávez
"Volviste gigante (...)como una personalidad internacional relevante, querida, admirada y respetada por muchos millones de personas en el mundo, y de modo especial por nuestro pueblo.”
https://www.facebook.com/share/p/1G42cuJg3o/
Roberto Morales Ojeda en Facebook
#Fidel nos enseñó que debemos pensar "en los niños de hoy, que son el pueblo de mañana". Y nos pidió también que "hay que cuidarlos y velar por ellos como los pilares con que se funda una obra verdaderamente hermosa y verdaderamente útil".
Celebremos su día abrazando un nuevo Código para ellos, que reafirma nuestra voluntad política de protegerlos hoy y siempre. Trabajaremos para que esta ley se conozca, se cumpla y garantice un futuro lleno de oportunidades, alegría y justicia para todos ustedes.
https://www.facebook.com/share/p/16Xqxd567H/
Miguel Díaz-Canel Bermúdez
(@DíazCanelB) en X
Emotiva jornada en la Isla de la Juventud. Junto al Comandante Ramiro Valdés recordamos los 70 años de la excarcelación de #Fidel y de los moncadistas, y nos reunimos con jóvenes en el Presidio Modelo, para rememorar aquellos días épicos. Impactante escuchar a héroes como Ramiro.
https://x.com/DiazCanelB/status/1923111705623646399
Miguel Díaz-Canel Bermúdez
(@DiazCanelB)
¿Qué profunda conexión llevó a #Fidel el 11 de abril de 1995, hasta "la playita, al pie de Cajobabo", por donde desembarcaron Martí y Gómez 100 años antes? Nuestra historia está llena de esos misteriosos enlaces que nos convocan otra vez a Playita de Cajobabo. Aquí estamos hoy.
https://x.com/DiazCanelB/status/1910669986932142504?t=P_XMUv5MCTQXRL_8Kdq8pw&s=19
Roberto Morales Ojeda en Facebook
En este 4 de Abril, día en que celebramos el aniversario de la Organización de Pioneros José Martí y la Unión de Jóvenes Comunistas, en nombre de nuestro Partido Comunista de Cuba enviamos a cada niño, adolescente y joven cubano, un mensaje de confianza y compromiso revolucionario.
Ustedes son la savia nueva que da continuidad a la obra de la Revolución, herederos legítimos del legado de quienes nos trajeron hasta aquí, muy especialmente de #Fidel. Desde su fundación ambas organizaciones han sido pilares en la formación de valores en las nuevas generaciones.
Los pioneros, con sus pañoletas azules y rojas, simbolizan la pureza y el futuro; los jóvenes comunistas, con su militancia, encarnan la vanguardia en la defensa de la Patria y el proyecto socialista .
https://www.facebook.com/share/p/1BY8ZWeMAq/
🗣️| Si yo estoy convencido de eso, salgo todos los días a pelear, salgo todos los días a batallar, salgo todos los días a enfrentar, salgo todos los días a dar la cara; y eso es lo que tenemos que lograr hacer entre todos, pero en cada lugar.
🗣️| Así vamos a vindicar a #Cuba todos los días; así vamos a traer a #Fidel a la hora actual; así vamos a articular las fuerzas revolucionarias; así vamos a entrar en una ofensiva para superar los problemas de este momento; así vamos a lograr una participación más consciente y más creativa.
🗣️| Y así vamos a articular el trabajo político-ideológico, orientado a la defensa de la construcción socialista en nuestra Revolución, para lograr la vida más plena de nuestra gente, que está en esa prosperidad que le debemos a nuestro pueblo, que tenemos que alcanzar. Y lo tenemos que lograr también con unidad.
✍️ Presidencia Cuba
Miguel Díaz-Canel Bermúdez
(@DiazCanelB) en X
Felicidades @CNIC_Cuba , primer centro científico creado por la Revolución y semilla fértil de uno de los mayores orgullos de #Cuba: el país de hombres y mujeres de ciencia proyectado por #Fidel que también celebra hoy 39 años del @CIGBCuba . Feliz aniversario, queridos colectivos.
https://x.com/DiazCanelB/status/1940085866912989229
Dr. Roberto Morales Ojeda
(@DrRobertoMOjeda) en X
Lo afirmó #Fidel y lo comprobamos en el intercambio permanente con el pueblo: la fuerza del @PartidoPCC radica en su vinculación estrecha con las masas. #UnidosXCuba
https://x.com/DrRobertoMOjeda/status/1891817926237257990?t=TiBSwKTf34VHh3ky8SMwpA&s=19
Dr. Roberto Morales Ojeda
(Dr.RobertoMOjeda) en X
Cuando se cumplió el centenario del glorioso desembarco de Martí y Gómez por Playitas, #Fidel fue al lugar y desde allí ondeó la bandera de la Patria. Ese gesto simbólico nos deja una lección y nos inspira. #CubaViveEnSuHistoria
https://x.com/DrRobertoMOjeda/status/1910649785050136869
Dr. Roberto Morales Ojeda
(@DrRobertoMOjeda) en X
#Fidel: "Cuantos más militantes revolucionarios y con alto nivel de educación política tengamos en el centro de trabajo, más fuerza tendrá la Revolución, más apoyo en las masas, más solidez". #100AñosConFidel
https://x.com/DrRobertoMOjeda/status/1961413990971556100
En Birán, bajo la sombra de los cedros y con la presencia del General de Ejército Raúl Castro Ruz y del Primer Secretario del Comité Central del Partido y Presidente de la República, Miguel Díaz-Canel Bermúdez, el miembro del Buró Político y Secretario de Organización Roberto Morales Ojeda expresó que el centenario de #Fidel, que se celebrará oficialmente el 13 de agosto de 2026, estará precedido por un vasto programa de actividades en las que participará todo el pueblo.
#100AñosConFidel
https://www.facebook.com/share/p/1C2Vsp3vWy/
Miguel Díaz-Canel Bermúdez
Este 13 de agosto, junto a nuestro querido Raúl, estuvimos en Birán en la celebración del cumpleaños 99 de #Fidel. La jornada fue el inicio del Programa Conmemorativo por el centenario de su natalicio.
A la sombra de los cedros y algarrobos de este sitio trascendental para la Patria, "La Colmenita" nos mostró, con su magia y pureza, que el Comandante en Jefe vivirá por siempre en el corazón de su pueblo y su juventud.
#100AñosConFidel
https://www.facebook.com/share/p/1GoxbgBLUJ/