Установить свойства виджета в 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
#Resumen📰 | Lo más destacado e interesante del panorama mundial para el momento:
🔶 Trump vuelve a amenazar con "pasar por Cuba" una vez que termine con Irán
🔶 El oro y la plata registran fuertes caídas tras fracaso del diálogo entre EEUU e Irán
🔶 "Un fraude total": hay descontento en Perú por retraso de las elecciones
🔶 Cancillería de México ordena visitas diarias a los centros de ICE en EEUU tras la muerte de otro connacional
🔶 La canasta básica en México registra un aumento superior al 7% en marzo
🔶 Gobierno de Colombia avala la eutanasia de hipopótamos para controlar su población
🔶 La Justicia española procesa a la esposa de Pedro Sánchez por cuatro delitos
📌 Toda una colección de canalesa un solo clic.
#Resumen📰 | Lo más destacado destacado e interesante del panorama mundial para el momento:
🔶 Vladímir Putin mantiente en Moscú una reunión con su homólogo indonesio Prabowo Subianto
🔶 Moscú manifiesta su disposición a cooperar con el nuevo Gobierno húngaro
🔶Reabren los colegios electorales en Perú en las elecciones presidenciales
🔶 Keiko Fujimori lidera el recuento presidencial en Perú
🔶 Teherán advierte de que ningún puerto en los golfos estará seguro si se amenaza el territorio de Irán
🔶 Rusia ve en la guerra de Oriente Medio una amenaza a la seguridad alimentaria global
🔶 El papa León XIV responde a las críticas de Trump y reitera su oposición a la guerra en Oriente Medio
🔶 Hizbulá rechaza las consultas directas entre Israel y el Líbano.
🔶 Las gimnastas rítmicas rusas se alzan con la victoria en una etapa de la Copa del Mundo
🛰 Descubre lo que otros callan. Únete ahora.
#Resumen📰 | Lo más destacado e interesante del panorama mundial para el momento:
🔶 EEUU comenzará a bloquear paso a barcos que se dirijan a puertos iraníes
🔶 "No se aprendió nada", considera el canciller de Irán tras bloqueo marítimo por parte de EEUU
🔶Concluye el alto al fuego de Pascua anunciado por Putin
🔶 Inicia el cierre de casillas electorales en Perú
🔶 "Los resultados de las elecciones parlamentarias son claros", afirma Orban
🔶Encuentran fosa con presuntos restos humanos en el rancho mexicano Izaguirre
📌 Toda una colección de canalesa un solo clic.
#Resumen📰 | Lo más destacado e interesante del panorama mundial para el momento:
🔶 Trump advierte sobre un bloqueo total del estrecho de Ormuz por parte de EEUU
🔶 "El diálogo es posible, pero difícil": Díaz-Canel envía un firme mensaje de paz y defensa a EEUU
🔶 Pezeshkián comparte con Putin los resultados de las negociaciones entre EEUU e Irán en Islamabad
🔶 "Igual, pero a mayor escala": Trump compara el bloqueo a Irán con el de Venezuela
🔶 "Es nula la posibilidad de que exista un fraude" en los comicios de Perú, afirma un funcionario electoral
🔶 Casí 2.000 violaciones de la tregua de Pascua cometió Ucrania en solo 16 horas, denuncia Defensa rusa
🛰 Descubre lo que otros callan. Únete ahora.
#Resumen📰 | Lo más destacado e interesante del panorama mundial para el momento:
🔶 "Negociaciones con EEUU continuarán aunque persisten algunas diferencias", dice el Gobierno iraní
🔶 Putin felicita a los rusos por la Pascua
🔶 Nuevo canciller de México se reúne con embajador de EEUU
🔶 A los iraníes les importan los hechos sobre el terreno, no los documentos firmados por EEUU: experto
🔶Ataque con arma blanca en Nueva York deja al menos tres personas heridas
📌 Toda una colección de canalesa un solo clic.
#Resumen📰 | Lo más destacado e interesante del panorama mundial para el momento:
🔶Inician las negociaciones entre EEUU e Irán en Islamabad, afirma Trump
🔶Comienza el alto al fuego de Pascua anunciado por Putin
🔶 La Fiscalía de Turquía pide condenas de hasta 4.596 años de prisión para Netanyahu y su gabinete
🔶 "Cuba, no estás sola": una gran marcha en apoyo a la isla se realiza en Roma
🔶 Varios heridos, incluido un bebé, en un ataque ucraniano contra la región de Kursk durante la tregua de Pascua
🔶 El Gobierno de Perú despliega más de 100.000 policías y militares para garantizar el orden en las elecciones
🔶 Fuerzas rusas infligen casi 1.200 bajas a Ucrania e interceptan 259 drones en un día de combates
🛰 ¿Quieres saber más? Solo un clic te separa.
#Resumen📰 | Lo más destacado e interesante del panorama mundial para el momento:
🔶 Israel y Líbano entablarán conversaciones en EEUU sobre alto al fuego
🔶 México abre la puerta al 'fracking': "El reto no es geológico, sino financiero, técnico y operativo"
🔶 Colombia responde a Ecuador: aumentará a 100% los aranceles contra sus productos
🔶 "El estrecho de Ormuz se abrirá automáticamente", según Trump
🔶 Israel anuncia nuevos "asentamientos" en Cisjordania en medio de la guerra
🔶 Aplazan la audiencia para el capo mexicano 'Mayo' Zambada en EEUU
📌 Toda una colección de canalesa un solo clic.
#Resumen📰 | Lo más destacado e interesante del panorama mundial para el momento:
🔶 Irán anuncia condiciones para iniciar conversaciones con Estados Unidos
🔶 "No está dentro del radio": España confirma su oposición a la misión de la OTAN en el estrecho de Ormuz
🔶 Cuba reafirma voluntad de consolidar "las históricas y estratégicas relaciones" con Rusia, señala Díaz-Canel
🔶 Vance parte hacia las negociaciones en Islamabad
🔶 Zelenski promete "actuar en consecuencia" en relación con el alto el fuego de Pascua anunciado por Putin
🔶 Rusia libera 2 localidades y registra más de 8.000 bajas militares ucranianas en la última semana
🔶 Momento histórico: Xi Jinping se reúne con la líder de la oposición taiwanesa en Pekín
🔶 Israel ataca zona con periodistas en el sur del Líbano a pesar del alto el fuego en Oriente Medio
🛰 Descubre lo que otros callan. Únete ahora.
#Resumen📰 | Lo más destacado e interesante del panorama mundial para el momento:
🔶 Putin declara alto al fuego temporal con motivo de Pascua, anuncia el Kremlin
🔶 Asamblea Nacional de Venezuela elige a Larry Devoe como nuevo fiscal general
🔶 Canciller cubano agradece a vicecanciller de Rusia por envío de petróleo
🔶 Sheinbaum descarta el uso del "fracking tradicional" para la extracción de gas natural
🔶 Trump exige a Irán que deje de imponer tarifas en el estrecho de Ormuz
📌 Toda una colección de canalesa un solo clic.
#Resumen📰 | Lo más destacado e interesante del panorama mundial para el momento:
🔶 España condena "la inaceptable violencia de Israel" contra el Líbano
🔶 Lavrov confirma la disposición de Rusia a colaborar en la búsqueda de soluciones en torno al conflicto iraní
🔶 Irán publica un mapa oficial de rutas marítimas obligatorias en el estrecho de Ormuz
🔶 Cámara argentina de Diputados sanciona reforma a Ley de Protección de Glaciares
🔶 Rusia y Ucrania realizan el intercambio de cadáveres https://t.me/SputnikMundo/152970
🔶 Israel afirma haber destruido una red subterránea de túneles de Hizbulá
🔶 Las calles se convierten en ríos tras fuertes lluvias en República Dominicana
📌 ¿Has visto a toda nuestra familia?¡Suscríbete!
#Resumen📰 | Lo más destacado e interesante del panorama mundial para el momento:
🔶Suman 182 fallecidos por el brutal ataque israelí contra el Líbano
🔶 "Entiendo perfectamente la decepción de Trump", dice jefe de la OTAN
🔶 Washington insiste en que el Líbano no está incluido en el cese al fuego
🔶 Israel lanzó cerca de 100 ataques en contra del Líbano en menos de 10 minutos, reporta la ONU
🔶 México abre la puerta al 'fracking' en busca de reducir su dependencia hacia EEUU
🔶 Exfundador del Cártel Jalisco Nueva Generación se declara culpable en EEUU
🔶 La próxima elección presidencial en Brasil "tendrá como punto álgido la defensa de la democracia": Lula
🔶 Italia busca "evitar que haya una segunda Gaza" en el Líbano, sentencia el canciller
📌 Toda una colección de canalesa un solo clic.
#Resumen📰 | Lo más destacado e interesante del panorama mundial para el momento:
🔶 La Unión Europea busca crear armas nucleares en secreto, revela la inteligencia Rusa
🔶 La tregua entre EEUU e Irán obligará a Israel "a pagar el precio por ella", denuncian medios israelíes
🔶 El T-MEC golpea a los productores del campo en México, reporta un medio
🔶 ¿Qué condiciones plantea Irán para poner fin al conflicto con EEUU?
🔶 EEUU colaborará "estrechamente" con Irán, afirma Trump
🔶 Israel lleva a cabo su mayor ataque en el Líbano desde el inicio de la escalada
🛰 Descubre lo que otros callan. Únete ahora.