Установить свойства виджета в 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
Argentina Liga Profesional Argentina🇦🇷
2026-05-13 21:45 UTC
Rosario Central vs. Racing Club
Predicted outcome: Racing Club❌
Predicted score: 1:2
Actual: Draw 1:1
#RosarioCentral#RacingClub
2026-05-14 00:45 UTC
River Plate vs. Gimnasia L.P.
Predicted outcome: River Plate✅
Predicted score: 2:1
Actual: River Plate 2:0
#RiverPlate#GimnasiaLP
#Football#ArgentinaLigaProfesional
Argentina Liga Profesional Argentina🇦🇷
2026-04-19 16:30 UTC
Aldosivi vs. Racing Club
Predicted outcome: Racing Club❌
Predicted score: 0:1
Actual: Draw 1:1
#Aldosivi#RacingClub
2026-04-19 20:00 UTC
River Plate vs. Boca Juniors
Predicted outcome: Draw❌
Predicted score: 1:1
Actual: Boca Juniors 0:1
#RiverPlate#BocaJuniors
2026-04-19 23:30 UTC
Rosario Central vs. Sarmiento Junin
Predicted outcome: Rosario Central✅
Predicted score: 1:0
Actual: Rosario Central 2:1
#RosarioCentral#SarmientoJunin
#Football#ArgentinaLigaProfesional
Argentina Liga Profesional Argentina🇦🇷
2026-04-05 18:30 UTC
Gimnasia L.P. vs. Huracan
Predicted outcome: Gimnasia L.P.❌
Predicted score: 1:0
Actual: Huracan 0:3
#GimnasiaLP#Huracan
2026-04-05 21:00 UTC
River Plate vs. Belgrano Cordoba
Predicted outcome: River Plate✅
Predicted score: 1:0
Actual: River Plate 3:0
#RiverPlate#BelgranoCordoba
2026-04-05 23:30 UTC
Central Cordoba de Santiago vs. Newells Old Boys
Predicted outcome: Central Cordoba de Santiago❌
Predicted score: 2:1
Actual: Newells Old Boys 1:3
#CentralCordobadeSantiago#NewellsOldBoys
#Football#ArgentinaLigaProfesional
Argentina Liga Profesional Argentina🇦🇷
2026-05-10 18:00 UTC
Rosario Central vs. Independiente
Predicted outcome: Rosario Central✅
Predicted score: 2:1
Actual: Rosario Central 3:1
#RosarioCentral#Independiente
2026-05-10 20:00 UTC
Estudiantes L.P. vs. Racing Club
Predicted outcome: Estudiantes L.P.❌
Predicted score: 2:1
Actual: Racing Club 0:1
#EstudiantesLP#RacingClub
2026-05-10 22:00 UTC
River Plate vs. San Lorenzo
Predicted outcome: River Plate❌
Predicted score: 2:0
Actual: Draw 1:1
#RiverPlate#SanLorenzo
2026-05-11 00:30 UTC
Velez Sarsfield vs. Gimnasia L.P.
Predicted outcome: Velez Sarsfield❌
Predicted score: 2:1
Actual: Gimnasia L.P. 0:1
#VelezSarsfield#GimnasiaLP
#Football#ArgentinaLigaProfesional
🇲🇽Футбол и спорт Латинской Америки: победы, стиль, культура
На этой неделе спортивная сцена Латинской Америки ярко заявила о себе — от футбольных матчей до культурных стратегий мировых клубов👇
Футбол⚽️
Сборная Мексики против Суринама
Национальная команда стремится убедить скептиков и укрепить веру болельщиков в свои возможности, демонстрируя уверенную игру.
Васко Агирре о духе сборной
Опытный тренер призывает вдохновляться достижениями других мексиканских спортсменов и сохранять боевой настрой.
Монтеррей добивается ничьей с миланским Интером (1:1)
Команда из Мексики подтверждает свою конкурентоспособность на международной арене клубного футбола.
FIFA отметила стиль клуба «Монтеррей»
Серхио Рамос стал центром внимания за свой элегантный образ от мексиканского дизайнера — очередное доказательство слияния спорта и моды.
River Plate стартует с победы на Клубном чемпионате мира
Клуб из Аргентины обыграл «Ураву Ред Даймондс» 3:1. Несмотря на травму Дриусси и низкую заполняемость трибун, команда уверенно начала турнир.
Клубный ЧМ: Латинская Америка против Европы
Команды Ботафого, Фламенго, Ривер Плейт и Монтеррей не уступают европейским грандам — эксперты говорят о новой эре равных возможностей.
Копа Аргентина: 1/16 финала уже на подходе
Определены даты ключевых матчей, включая встречи Сан-Лоренсо vs Кильмес и Тигре vs Баньфилд.
ПСЖ завоёвывает Латинскую Америку через музыку
Французский клуб сотрудничает с Maluma, J Balvin и Blessd, превращаясь в культурный символ для молодежной аудитории континента.
Историческое достижение на Золотом кубке
Катя Итцель Гарсия стала первой мексиканкой-судьёй на турнире — значимое событие для женского футбола страны.
ЧМ-2026 🏆
Туризм CDMX предупреждает: не завышайте цены на ЧМ-2026
Власти Мехико просят гостиницы и арендаторов удержать справедливые цены на период мундиаля, чтобы туризм был доступным.
Другие виды спорта 💪
La Parka — триумф на Triplemanía Regia
Легендарный рестлер сорвал овации за зрелищный прыжок — шоу собрало фанатов со всей страны.
Франко Колапинто о Гран-при Канады
Аргентинский пилот Alpine раскритиковал стратегические ошибки команды и отметил необходимость срочного набора очков.
#Футбол#Мексика#RiverPlate#PSG#КубокМира#Triplemania#Колапинто#LaParka#Blessd#Maluma#CDMX#ЛатинскаяАмерика#Спорт
👉Всегда свежие новости о странах Латинской Америки!
Argentina Liga Profesional Argentina🇦🇷
2026-03-22 18:30 UTC
Sarmiento Junin vs. Aldosivi
Predicted outcome: Draw❌
Predicted score: 1:1
Actual: Sarmiento Junin 2:0
#SarmientoJunin#Aldosivi
2026-03-22 20:45 UTC
Estudiantes de Rio Cuarto vs. River Plate
Predicted outcome: River Plate✅
Predicted score: 0:1
Actual: River Plate 0:2
#EstudiantesdeRioCuarto#RiverPlate
2026-03-22 23:00 UTC
Boca Juniors vs. Instituto Cordoba
Predicted outcome: Boca Juniors✅
Predicted score: 2:0
Actual: Boca Juniors 2:0
#BocaJuniors#InstitutoCordoba
2026-03-23 01:15 UTC
Argentinos JRS vs. Platense
Predicted outcome: Argentinos JRS✅
Predicted score: 1:0
Actual: Argentinos JRS 1:0
#ArgentinosJRS#Platense
2026-03-23 01:15 UTC
Independ. Rivadavia vs. Rosario Central
Predicted outcome: Rosario Central❌
Predicted score: 0:1
Actual: Independ. Rivadavia 2:0
#IndependienteRivadavia#RosarioCentral
#Football#ArgentinaLigaProfesional
Argentina Liga Profesional Argentina🇦🇷
2026-04-12 18:00 UTC
Newells Old Boys vs. San Lorenzo
Predicted outcome: Draw✅
Predicted score: 1:1
Actual: Draw 0:0
#NewellsOldBoys#SanLorenzo
2026-04-12 18:00 UTC
Platense vs. Gimnasia M.
Predicted outcome: Platense❌
Predicted score: 1:0
Actual: Draw 1:1
#Platense#GimnasiaM
2026-04-12 20:30 UTC
Atletico Tucuman vs. Tigre
Predicted outcome: Draw✅
Predicted score: 1:1
Actual: Draw 0:0
#AtleticoTucuman#Tigre
2026-04-12 20:30 UTC
Huracan vs. Rosario Central
Predicted outcome: Draw❌
Predicted score: 1:1
Actual: Huracan 3:1
#Huracan#RosarioCentral
2026-04-12 23:00 UTC
Racing Club vs. River Plate
Predicted outcome: Draw❌
Predicted score: 1:1
Actual: River Plate 0:2
#RacingClub#RiverPlate
#Football#ArgentinaLigaProfesional
CONMEBOL Sudamericana🌎
2026-04-15 22:00 UTC
Racing Club vs. Botafogo
Predicted outcome: Racing Club❌
Predicted score: 4:0
Actual: Botafogo 2:3
#RacingClub#Botafogo
2026-04-15 22:00 UTC
Caracas FC vs. Independiente Petrolero
Predicted outcome: Draw❌
Predicted score: 1:1
Actual: Caracas FC 1:0
#CaracasFC#IndependientePetrolero
2026-04-16 00:00 UTC
Olimpia vs. Barracas Central
Predicted outcome: Olimpia❌
Predicted score: 1:0
Actual: Draw 0:0
#Olimpia#BarracasCentral
2026-04-16 00:30 UTC
River Plate vs. Carabobo FC
Predicted outcome: Draw❌
Predicted score: 1:1
Actual: River Plate 1:0
#RiverPlate#CaraboboFC
2026-04-16 02:00 UTC
Millonarios vs. Boston River
Predicted outcome: Draw❌
Predicted score: 1:1
Actual: Millonarios 1:0
#Millonarios#BostonRiver
2026-04-16 02:00 UTC
America de Cali vs. Alianza Atletico
Predicted outcome: Draw❌
Predicted score: 1:1
Actual: America de Cali 2:1
#AmericadeCali#AlianzaAtletico
#Football#CopaSudamericana