Установить свойства виджета в 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
🇬🇧Batman_Gotham Knights_Gilded City #1-2
🇷🇺Бэтмен_Рыцари Готэма_Золотой город #1-2
Таинственный вирус поразил Готэм, превратив зараженных в бешеных маньяков с желтыми глазами, склонных к мародерству, воровству и вспышкам гнева. Бэтмен и его Рыцари пытаются сдержать распространение странного вируса, исследуя его происхождение. Но эта необычная болезнь не в первый раз поражает город.
Совершите путешествие в Готэм середины 1800-х годов и познакомьтесь с первым мстителем в маске — таинственным героем, известным как Беглец...
#комикс#comics#бэтмен#batman#готэм#gotham
#dc
🎬 Quiero aprovechar el reciente estreno de Joker, la cinta de Todd Phillips que arrasa en taquilla, para realizar un análisis sobre uno de los núcleos que plantea la película, desde un marco psicológico. Quiero destacar la soberbia caracterización e interpretación de Joaquin Phoenix, que se adueña del personaje desde el primer plano y te arrastra a su miseria de una forma magistral. Especial atención a los planos de su espalda retorciéndose.
.
🚑 Destaco la importancia del ambiente para la conducta en psicología. Para Arthur Fleck es una Gotham decadente, reflejada en una sociedad hipócrita, abusiva, carente de empatía y que da la espalda a las personas con trastornos mentales, reflejados en problemas como esa carcajada que le sale a Arthur de manera involuntaria, la depresión y el abuso infantil. Un ambiente que te niega y expulsa de los lazos familiares, laborales y sociales.
.
💣 Quiero hacer un matiz que he visto en pocos análisis. Lo que le sucede a Arthur durante el metraje es condición necesaria, pero no suficiente. Eso sería un libre albedrío simplista. Joker no es el mero producto de las experiencias vividas de Arthur, sino de su elección particular, de su capacidad de afrontamiento.
.
🤕 En una de las escenas, un plano se detiene sobre el diario que tiene Arthur, recogiendo la frase que puedes leer en la imagen: “Lo peor de tener una enfermedad mental es que la gente espera que te comportes como si no la tuvieras”.
.
🙇🏻♂ Traslada esa cita a nuestras vidas, te resultarán familiares expresiones como los niños no lloran, eso no es nada, intenta relajarte, no estés nervioso, no llores (en un funeral), tienes que ser fuerte, eso no es tan grave, hay gente que está peor, yo no me relacionaría con alguien tan raro con esquizofrenia...
.
🤡 Cada uno elige su forma de gestión ante las crisis vitales. Joker elige el payaso, el maquillaje, el baile, la risa. El payaso esconde bajo todo eso lo que la sociedad entierra. Así, es permitido que sea él mismo. De esta manera, Joker es aceptado (motivación de afiliación), fuera de cualquier tipo de convencionalismo.
.
💬 ¿Has visto la película, qué opinas?, ¡déjamelo en un comentario!
.
🌐www.davidgomezpsicologo.com
.
#psicología#psicólogo#Joker#JoaquinPhoenix#ArthurFleck#psicologíaonline#salud#Gotham#emociones#emoción#pensamientos#conducta#reflexión#saludmental#escritor#felicidad#ciencia#ansiedad#depresión#estrés#vida#bienestar#instagram#Amor#Batman#terapiadepareja#cianciasdelasalud#bienestar#mente#cerebro