Установить свойства виджета в 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
📺- CONTROL DE AEROPUERTOS: USA -📺
Título original: To Catch a Smuggler
Género:#Reality
Temporadas: 9 📡
Año: 2020 - Presente
Origen: EEUU 🇺🇸
Tráiler: youtu.be/nzuvwHLShEQ
Sinopsis:
Una serie que explora las historias cargadas de intensidad y emociones protagonizadas por la patrulla aduanera de Estados Unidos en algunos de los aeropuertos más concurridos del mundo por millones de pasajeros diariamente. Desde el Aeropuerto Internacional de Los Ángeles, Aeropuerto La Guardia y el Aeropuerto John F. Kennedy, entre otros. Descubra cómo se capturan a estos traficantes y sus cargamentos escondidos en lugares nunca imaginados.
Disponible:Disney+
@SeriesClubHD
🎥- EL GRAN BRUNCH -🎥
Título Original: The Big Brunch
Género:#Reality
Temporadas: 1 📼
Año: 2022
Origen: EEUU 🇺🇸
Tráiler:dai.ly/x8fe8e2
Sinopsis:
The Big Brunch es una serie de competencias de cocina que celebra las voces culinarias más inspiradoras y desconocidas del país.
A los chefs se les ofrecerá la oportunidad de compartir sus historias y sus sueños comerciales, al mismo tiempo que competirán por un premio que les cambiará la vida. Todo mientras busca formas innovadoras y personales de redefinir lo que significa cenar entre las 11 a.m. y 3 p.m. La serie, además de dar a conocer chefs busca ser la oportunidad de que todo el mundo se dé cuenta de que tienen al menos un amigo, un familiar o un compañero de trabajo que es extraordinario en lo que hace y lo positivo que es, poder apoyarlo en la búsqueda de sus sueños.
Disponible:Max
@SeriesClubHD
📺- IN THE EYE OF THE STORM -📺
Título Original: In The Eye of the Storm
Género:#Reality
Temporadas: 1📡
Año: 2024
Origen: EEUU 🇺🇸
Tráiler: youtu.be/BdMJ3G9Otqw
Sinopsis:
Desde tornados hasta incendios forestales, las imágenes inmersivas capturan el epicentro de impactantes desastres naturales en tiempo real como nunca antes.
Disponible:Movistar+ | Max
@SeriesClubHD
📺- LA CASA DE EMPEÑOS -📺
Título original: Pawn Stars
Título Alternativo: Estrellas del Empeño
Género:#Reality#Comedia
Temporadas: 17 📡
Año: 2009 - Presente
Origen: EEUU 🇺🇸
Tráiler: youtu.be/S46rcW5ADV4
Sinopsis:
Rick Harrison y su familia poseen y dirigen una casa de empeños en Las Vegas. Compran, venden y tasan artículos de valor histórico.
Disponible:A Tres Player | TiviFy
@SeriesClubHD
🎥- CATFISH: MENTIRAS EN LA RED -🎥
Título Original: Catfish: The TV Show
Género:#Reality#Romántica#Drama#Documental
Temporadas: 9 📼
Año: 2012 - Presente
Origen: EEUU 🇺🇸
Tráiler:youtu.be/JbQyoH819rM
Sinopsis:
Nev Schulman y Max Joseph ayudan a las personas que se han enamorado en Internet a comprobar la autenticidad de la identidad de sus amantes.
Disponible:Pluto TV | Movistar+ | Paramount+
@SeriesClubHD