Установить свойства виджета в 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
☣️Título: RPG Fudousan — ( RPG Real Estate )
✔️Capitulos: 12
✔️Calidad: #720p
✔️Género: #Comedia#Fantasía
✔️Idioma: #Japonés_Sub_Español
🀄️Sinopsis:
La historia comienza 15 años después de que el rey demonio fuera derrotado y el mundo se volviera pacífico. Kotone, quien se graduó de la escuela y se convirtió en mago, preguntó a RPG Real Estate, afiliado al reino, para encontrar un nuevo hogar. En realidad, RPG Real Estate era el lugar de trabajo de Kotone, y junto con Fa, un semihumano, el sacerdote Rufuria y el soldado Rakira, ayudan a respaldar la búsqueda de nuevos hogares para los clientes con diversas circunstancias
📤Apoyame Aquí 👈
@Animes480pFinalizados
☣️Título: Koi Wa Sekai Seifuku No Ato De — ( Love After World Domination )
✔️Capitulos: 12
✔️Calidad: #720p
✔️Género: #Romance#Comedia
✔️Idioma: #Japonés_Sub_Español
🀄️Sinopsis:
Es amor a primera vista para Fudo y Desumi, excepto que fue durante una batalla de vida o muerte. Fudo, líder del escuadrón de héroes Gelato 5, y Desumi, la Reina de la Muerte de la sociedad malvada Gekko, se han encontrado atrapados en un amor prohibido, ¡y es su primera relación! Moviéndose en secreto, viven tomados de la mano con un arma en la otra, descubriendo lo que es verdaderamente justo en el amor y la guerra.
⚠️Versión Doblaje Español Latino
>https://t.me/Animes480pFinalizados/23560
📤Apoyame Aquí 👈
@Animes480pFinalizados
☣️Título: Koi Wa Sekai Seifuku No Ato De — ( Love After World Domination )
✔️Capitulos: 12
✔️Calidad: #720p
✔️Género: #Romance#Comedia
✔️Idioma: #Español_Latino🇲🇽
🀄️Sinopsis:
Es amor a primera vista para Fudo y Desumi, excepto que fue durante una batalla de vida o muerte. Fudo, líder del escuadrón de héroes Gelato 5, y Desumi, la Reina de la Muerte de la sociedad malvada Gekko, se han encontrado atrapados en un amor prohibido, ¡y es su primera relación! Moviéndose en secreto, viven tomados de la mano con un arma en la otra, descubriendo lo que es verdaderamente justo en el amor y la guerra.
⚠️Versión Subtitulada
>https://t.me/Animes480pFinalizados/23533
📤Apoyame Aquí 👈
@Animes480pFinalizados
☣️Título: Shinigami Bocchan to Kuro Maid — ( The Duke of Death and His Maid ) — T1
✔️Capitulos: 12
✔️Calidad: #720p
✔️Género: #Comedia#Drama#Romance
✔️Idioma: #Japonés_Sub_Español
🀄️Sinopsis:
Maldecido por una bruja cuando era niño, un joven duque obtuvo el poder no deseado para matar a todos los seres vivos que toca. Obligado a separarse de su familia a una gran mansión en lo profundo del bosque, el duque es tratado como si no existiera y sus compañeros lo rechazan continuamente. Sin embargo, no está completamente solo. Rob y Alice, su mayordomo y su criada, siempre están a su lado. A Alice le encanta burlarse de él y, a medida que su relación crece, el duque se propone liberarse de su maldición mortal. Por supuesto, va a necesitar ayuda, ¿y quién mejor para hacerlo que los diversos habitantes de lo sobrenatural?
⚠️Versión Doblaje Español Latino
> https://t.me/Animes480pFinalizados/23014
@Animes480pFinalizados
☣️Título: Healer Girl
✔️Capitulos: 12
✔️Calidad: #720p
✔️Género: #Música
✔️Idioma: #Japonés_Sub_Español
🀄️Sinopsis:
La historia se sitúa en un mundo en el que predominan tres escuelas de medicina: La medicina occidental, la oriental y la “medicina vocal”. La curación de enfermedades y lesiones mediante canciones es una técnica especial que no solo mejora la salud metal de los pacientes, sino también la salud mental de los médicos. Estos “sanadores” se esfuerzan por cantar cuando se les pide que respondan a la salud y la ansiedad de pacientes y médicos por igual. El anime muestra a las sanadoras en formación en el Instituto Médico Vocal Karasuma.
@Animes480pFinalizados
☣️Título: Shinigami Bocchan to Kuro Maid — ( The Duke of Death and His Maid ) — T1
✔️Capitulos: 12
✔️Calidad: #720p
✔️Género: #Comedia#Drama#Romance
✔️Idioma: #Español_Latino🇲🇽
🀄️Sinopsis:
Maldecido por una bruja cuando era niño, un joven duque obtuvo el poder no deseado para matar a todos los seres vivos que toca. Obligado a separarse de su familia a una gran mansión en lo profundo del bosque, el duque es tratado como si no existiera y sus compañeros lo rechazan continuamente. Sin embargo, no está completamente solo. Rob y Alice, su mayordomo y su criada, siempre están a su lado. A Alice le encanta burlarse de él y, a medida que su relación crece, el duque se propone liberarse de su maldición mortal. Por supuesto, va a necesitar ayuda, ¿y quién mejor para hacerlo que los diversos habitantes de lo sobrenatural?
⚠️Versión Subtitulada
> https://t.me/Animes480pFinalizados/22999
@Animes480pFinalizados
☢️Título: Yuusha, Yamemasu — ( I'm Quitting Heroing )
✔️Capitulos: 12 + 02 Ovas
✔️Calidad: #720p
✔️Género: #Acción#Aventura#Comedia#Fantasía
✔️Idioma: #Japonés_Sub_Español
🀄️Sinopsis:
Después de salvar el mundo, el héroe más fuerte, Leo, se convirtió en alguien que no es querido en el pacífico mundo humano. Era demasiado fuerte. Exiliado, busca un trabajo en el Ejército del Rey Demonio, al que había derrotado y que necesita ser reconstruido. El Ejército tenía muchos problemas: demasiado trabajo, problemas financieros, etc. Leo comienza a mejorar las cosas utilizando su poder. Leo se encuentra de nuevo con Echidna y le pregunta por qué invadió el mundo humano. Una historia inesperada...
📤Apoyame Aquí 👈
@directorioplusultra
@Animes480pFinalizados
☢️Título: Koroshi Ai — ( Love Of Kill )
✔️Capitulos: 12
✔️Calidad: #720p
✔️Género: #Acción#Romancee
✔️Idioma: #Japonés_Sub_Español
🀄️Sinopsis:
Dos asesinos se enfrentan cara a cara. Por un lado está Chateau, una cazadora de recompensas, y por otro lado el misterioso y poderoso Ryang-Ha. Chateau y Ryang-Ha se convertirán en enemigos tras este enfrentamiento... o así debería haber sido, pero por algún motivo, a Ryang-Ha le acaba gustando Chateau y se dedica a seguirla a todas partes. Poco a poco Chateau comienza a considerar a Ryang-Ha un compañero, lo que hace que se ambos acaben involucrados en el tema de varias organizaciones dándole caza a él. Y es más, resulta que todo tiene relación con el pasado de la chica.
📤Apoyame Aquí 👈
@Animes480pFinalizados