Установить свойства виджета в 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
🌟Сегодня день провела во Владимире)
Это потрясающе красивый город с богатейшей историей!
Именно здесь осуществилась моя мечта... я увидела фрески Андрея Рублёва!
На самом деле, это невероятное чувство, когда ты видишь подлинные работы величайшего художника, которые сохранились с 1408года!
Волшебно...
Но, кстати, храм расписывал не он один, ему помогал его ученик - Даниил Чёрный. А общая площадь фресок составляет более 300 м²!
Посмотреть их можно в Успенском соборе города Владимира)
#voyage
👋🏻 Ребят, всем привет! Недавно я вернулась с полуфинала Всероссийского конкурса «Большая перемена», где в рамках образовательной программы была на экскурсии в Нижегородском Политехническом университете и очень хочу поделиться с вами своими впечатлениями!
🔹Ну во первых, сразу, что бросилось в глаза, это преподаватели. Они настолько горят своим делом, верят в него и с этим посылом учат студентов!
🔹Во вторых, Политех - это про практику. Всем студентам предлагают трудоустройство, а также летом есть возможность пройти стажировку в крупнейших российских компаниях, например, Газпром. Девушка, которая нам про это рассказывала сама проходила там стажировку в отделе информационной безопасности (IT)
Я была в лабораториях, где студенты разрабатывают различные приспособления для улучшения производств, оборудования и т.д. И это очень интересно видеть, слушать и осознавать, что ребята реально по большей части учатся на практике и защищают свои дипломные работы исходя из своих практических исследований и разработок!
Также, я никогда не знала, что у нас есть павильон, где ребята с ядерных кафедр напрямую тестируют и разрабатывают на уменьшенных версиях реакторов и других интересных штук, допустим, работу реактора в водной, газообразной и жидкометаллической среде. Когда я вошла в комнату и увидела гигантские трубы, по которым течёт расплавленный свинец, то, мягко говоря, очень удивилась! И всё это самостоятельно сделали студенты!
🔹В третьих, это стипендия. В Политехе есть возможность получать стипендию более 20 000 рублей, но для этого надо стараться)
Подытожив, хочу сказать, что Политехнический университет это огромные возможности для ребят, которые видят себя в технической сфере, это люди, которых объединяет любовь к своему делу!
#возможности#voyage
https://t.me/kamissokosekou3
✈️ Transport aérien : Réouverture totale de l'Aéroport de Bamako-Sénou après une sécurisation réussie
L'activité reprend son envol sur le tarmac de la capitale. Ce dimanche 26 avril 2026, dès 06h00, l'Aéroport International Président Modibo Keïta-Sénou a officiellement rouvert ses portes après une parenthèse sécuritaire de 24 heures. Sous la supervision rigoureuse des forces de l'ordre et des autorités aéroportuaires, les premiers décollages et atterrissages se sont déroulés sans aucun accroc, marquant un retour à la normale pour le trafic aérien. Les voyageurs, qui ont pu embarquer dans une atmosphère de sérénité retrouvée, bénéficient d'un dispositif de contrôle renforcé garantissant la fluidité et la sûreté des liaisons. Cette reprise rapide témoigne de la réactivité des services de l'État pour assurer la continuité des échanges internationaux du pays.
#Mali#Aviation#Bamako#AéroportSénou#Sécurité#Transport#Voyage#Maliactu
#ag
2 волшебных дня,встречи с близкими,море смеха,ночной поезд,тонны часов за разговорами обо всем,полусонное утро,полупустые улицы,пустые уютные ресторанчики с самыми кинематографичными видами из окна,невероятно приветливые люди,внимательные официанты,самые изысканные блюда и тонкие напитки,заботливый персонал отеля который мы выбрали для пристанища @wawelberg_hotel✨ я не говорю уж как он завораживающе красив,ресторан @minerals.rest 💞на территории гостиницы с диковинными шедеврами от кондитеров и шеф-повара,ночной сервис,портье,ну а консьерж Наталья 🫶🏻была нашими глазами,руками,ногами, и помогала осуществлять все самые романтичные затеи в этой поездке,мои лучшие крёстные Феи сочинили мне образ для спонтанной поездки
@victory_mi Вика прямо из Кении занималась поисками и с @nastyle_showroom@nastyle_boutique
подобрали весь наряд, @c_62o с Настей мы познакомились через @ilya_chirikov_stylist Илюшу,и собирались прям с первого взгляда ,водители,проводники ,замершие часы,затаившая морозное дыхание погода -мы Вам очень благодарны за это волшебное путешествие ,с полным ощущением того,что мы ну как минимум оказались на Марсе..или где-то так далеко,что мы все это видели впервые и слегка терялись в ну очень знакомых переулках..Это приятный вакуум уюта,спокойствия,любви и человеческого тепла мы никогда не забудем и обязательно вернёмся вновь ..для того ,чтобы открыть новые наши места,наши улицы,наши уголки,и конечно побывать там,где мы уже были,но дать себе возможность вспомнить и не забывать те главные,наши первые места,где все начиналось и как .. Расскажите про Ваши места,куда Вы иногда возвращаетесь за приятными воспоминаниями?У Вас есть такие?
#adventure#voyage#saintpetersburg#нереклама#облагодарности#всемспасибо#petitefemme#purelove#photooftheday#moodoftheday#miracle#heavenonearth #🤍