Установить свойства виджета в 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
🚨🥃🌎#PARAGUAY🇵🇾
MURIO AL CAER DE CABEZA DESDE UN BALCÓN
En Remansito, un hombre falleció luego de caer desde un balcón, según los primeros datos, la víctima se encontraba en estado etílico y perdió el equilibrio
🇵🇾#Paraguay: Recently released footage shows a Paraguayan Air Force (FAP) A-29 Super Tucano aircraft pursuing a suspected drug-trafficking plane that illegally entered national airspace in the country’s northern region, firing warning shots during the interception.
(📹 via @ZuluCanal on TG & @ZDefensa on X)
#Paraguay#educación Anuncian huelga nacional de docentes. https://www.resumenlatinoamericano.org/2023/10/18/paraguay-educadores-anuncian-paro-general-por-mejoras-salariales/
#Paraguay#educación Anuncian nueva huelga en la Universidad Nacional de Asunción. https://www.ultimahora.com/tras-segundo-dia-de-movilizacion-anuncian-nuevo-paro-en-la-una
#Paraguay#educación Huelga de trabajadores en la Universidad Nacional de Asunción. https://www.una.py/paro-de-la-una-moviliza-a-mas-de-3000-personas-en-el-microcentro
#Paraguay#sanidad Huelga de trabajadores del área de limpieza de la Unidad Sanitaria del Instituto de Previsión Social en San Juan Bautista, Misiones. https://www.abc.com.py/nacionales/2023/10/23/funcionarios-de-limpieza-de-ips-san-juan-realizan-huelga-tras-no-cobrar-hace-tres-meses/
🇹🇼🇵🇾🇺🇸 Taiwan president to visit Paraguay next month, paving way for possible US transits
Paraguay is preparing to receive Taiwan's President Lai Ching-te next month, President Santiago Pena said on Monday, meaning Lai will also most likely make sensitive transit stops in the United States bound to infuriate Beijing.
Paraguay is one of only 12 countries to maintain formal diplomatic ties with Taiwan, and the only one in South America.
Visits by Taiwanese presidents to Central and South America always involve what are officially only stopovers in the United States given the distance from Taiwan, but are often the most important parts of the trip given Washington is the island's top international backer and arms supplier.
#Taiwan#Paraguay#USA
@asianomics
#LICORES#PARAGUAY🥃 | La mandioca va a la copa: Emperatriz, un destilado único que fusiona tradición y modernidad https://ift.tt/K1RXLPd November 15, 2024 at 04:00AM
#Paraguay mete prisa a la #UE para aprobar el acuerdo con #Mercosur: si no está aprobado en diciembre, cortaría el proceso
https://www.dw.com/es/p%C3%B3ker-por-el-acuerdo-entre-mercosur-y-la-uni%C3%B3n-europea/a-66942484
⚽️🌎Clasificación Mundial 2026
Colombia 2-1 Argentina#Mundial2026#Paraguay#Brasil
Celebra Colombia y celebra el Rayo Vallecano la resurrección de James Rodríguez, colosal en la Copa América y también en el primer partido grande que le aguardó esta temporada, ante la campeona del mundo y en Barranquilla, ante los ojos de Sudamérica y también los de España, que le vuelven a hacer un hueco cuando ya parecía parte del pasado. Una asistencia y un gol, de penalti, le bastaron para liquidar a Argentina y aumentar su aura.
https://as.com/futbol/internacional/james-tumba-a-argentina-n/
🏆@Info288_deportes
⚽️🌎Clasificación Mundial 2026
Paraguay 1-0 Brasil#Mundial2026#Paraguay#Brasil
La derrota (1-0) de Brasil ante Paraguay más de 15 años después en un partido de Eliminatorias Sudamericanas ejemplifica el delicado momento que atraviesa la 'Seleçao'. Incapaces de reponerse al golazo de Diego Gómez en la primera mitad, los de Dorival se hundiendo en Asunción... y vuelven a complicarse la vida en tras coger aire ante Ecuador. Sólo marchan un punto por encima de la 'repesca' que, precisamente, marcan los de Alfaro.
https://www.marca.com/futbol/futbol-internacional/cronica/2024/09/11/66e0d5eee2704eb4088b45bc.html
🏆@Info288_deportes
🇵🇾🇷🇺 Une plaque commémorative avec les noms d'enseignants russes a été installée dans le bâtiment de la faculté d'ingénierie de l'Université nationale d'Asuncion, la capitale du Paraguay.
#paraguay#russie#université#plaque