Установить свойства виджета в 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
⭕️LA EPOPEYA DE BEIT HANÚN
🔻En la medianoche del 7 de julio, combatientes de #Hamás llevaron a cabo una operación militar y de inteligencia altamente compleja, estructurada en cuatro fases, que provocó decenas de bajas entre las fuerzas sionistas.
🔻El portavoz del ejército israelí ha admitido hasta ahora la muerte de cinco soldados y catorce heridos...
🔗spanish.khamenei.ir
✅@khamenei_es
KHAMENEI.IR | 𝕏 | Facebook| TikTok
🟥El ayatolá Jameneí, reunido hoy sábado con el jefe y los miembros del Consejo de Liderazgo de #Hamás:
🔻«Hamás ha vencido al régimen sionista y a EEUU»
🔗👉LEER LA NOTICIA COMPLETA
Sigan el canal en Telegram del Ayatolá Jameneí 👉@khamenei_es
KHAMENEI.IR | 𝕏 | Facebook| TikTok
⭕️ «El jefe del régimen sionista, ese miserable deshonrado, dijo que querían aniquilar a #Hamás. Y ahora ese mismo régimen sionista se ha sentado a negociar con el mismo Hamás al que querían aniquilar y ha aceptado sus condiciones para que se lleve a la práctica el alto el fuego...» (22/01/2025).
🔗 LEER 👉spanish.khamenei.ir/news/6424
Sigan el canal en Telegram del Ayatolá Jameneí 👉@khamenei_es
KHAMENEI.IR | 𝕏 | Facebook| TikTok
🟥 HAMÁS HA VENCIDO AL RÉGIMEN SIONISTA
⭕️ «El régimen sionista ha causado el martirio de los dirigentes de #Hamás, pensando que con ello Hamás estaba acabado, y mientras tanto Hamás sigue luchando, sigue combatiendo. Lo que eso significa es la derrota del régimen sionista...» (07/11/2024).
🔗LEER👉spanish.khamenei.ir/news/6251
Sigan el canal en Telegram del Ayatolá Jameneí 👉@khamenei_es
KHAMENEI.IR | 𝕏 | Facebook | TikTok
⭕️ «La criminal banda sionista ha llegado a la conclusión de que jamás vencerá a #Hamás» (04/10/2024)
#Gaza#Palestina
Sigan el canal en Telegram del Ayatolá Jameneí 👉@khamenei_es
KHAMENEI.IR | 𝕏 | Facebook| TikTok
#Israel aprueba acuerdo para la liberación de 50 rehenes retenidos por #Hamás y un alto el fuego de cuatro días en los combates en #Gaza
https://www.haaretz.com/israel-news/2023-11-22/ty-article-live/israeli-cabinet-okays-deal-for-release-of-50-hostages-held-by-hamas-temporary-cease-fire/0000018b-f52c-d117-abcf-f7ef5d450000
El consejo de ministros de #Israel decreta el fin de abastecimiento eléctrico y de combustible a #Gaza como parte de una respuesta destinada a «destruir las capacidades militares y gubernamentales de #Hamás»
Netanyahu: «Nos dirigimos hacia una guerra larga y agotadora»
Como en toda guerra inter-imperialista, los trabajadores y las clases subalternas de un lado y otro serán hambreadas, sacrificadas y convertidas carne de cañón por sus explotadores de un lado y otro del muro de Gaza.
https://www.haaretz.com/israel-news/2023-10-07/ty-article-live/israel-under-attack-terrorists-infiltrate-from-gaza-amid-massive-rocket-barrages/0000018b-088b-dae9-adcb-abbff50f0000#21849623
#Hamás: #antisemitismo y #sexismo dando forma a las acciones militares hasta convertirlas en el mejor reflejo de su brutalidad doblemente reaccionaria
«Una investigación del Times descubrió nuevos detalles que muestran un patrón de violaciones, mutilaciones y brutalidad extrema contra las mujeres en los ataques a Israel»
https://www.nytimes.com/2023/12/28/world/middleeast/oct-7-attacks-hamas-israel-sexual-violence.html
#Israel#Palestina. #Hamás y la #YihadIslámica dan prueba del salvajismo propio de un proyecto explotador y antihumano al centrar sus objetivos en el secuestro, la tortura, vejación y asesinato de rehenes
«Serían muy numerosos, según las imágenes transmitidas en los vídeos, de los terroristas y especialmente atroces. Como el de la joven israelí ensangrentada, subida a un jeep, desfilada y arrastrada por el pelo, gritando “Allah Akbar”, en medio de un grupo de hombres que luego se abalanzaron sobre ella en el coche.»
«Varias familias con niños fueron secuestradas en comunidades agrícolas situadas a pocos kilómetros de la frontera en Kfar Aza, Be'eri y Ein Hashlosha. Los atacantes los empujan junto a tanques robados al ejército y los filman haciendo el signo de la V de la victoria. En otras imágenes, los civiles mueren a quemarropa. Nadie del lado israelí puede indicar por el momento el número de rehenes. En este momento se están produciendo combates callejeros y las fuerzas especiales finalmente han entrado en la zona atacada y en la ciudad de Sderot, para atacar a todos los comandos islamistas que tengan rehenes. Miembros de Hamas incluso estuvieron presentes en las calles de Ashkelon, una señal de que la conmoción y el sentimiento de pánico se están apoderando del país.»
https://www.marianne.net/monde/proche-orient/attaque-du-hamas-la-tragedie-des-otages-israeliens-et-les-failles-du-mossad