Установить свойства виджета в 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
До Нового года остались считанные дни, а подарок для дизайнера или архитектора ещё не выбран? У MosBuild есть идеи!
В подборке — предметы, которые точно оценят те, кто разбирается в форме, цвете и пространстве
#mosbuild#вдохновение
Подробнее о проектах читайте в источниках:винодельня от ASR, подборка образовательных учреждений от журнала Interior+Design, аэропорт от KPLN
#вдохновение#mosbuild
10 городов, 3 страны и сильное партнёрство: спасибо за D+A Tour 25/26 ❤️
Региональная программа D+A Tour от MosBuild в этом сезоне стала масштабным профессиональным маршрутом по России и странам СНГ. Мы объединили 10 городов — Санкт-Петербург, Казань, Нижний Новгород, Минск, Новосибирск, Красноярск, Екатеринбург, Алматы, Краснодар и Ростов-на-Дону. Команда выставки преодолела тысячи километров, чтобы создать пространство для профессионального диалога, вдохновения и развития архитектурно-дизайнерского сообщества.
Каждая встреча D+A Tour — это новые знакомства, живые дискуссии, обмен опытом и практикой, актуальные тренды и реальные кейсы. Этот масштабный путь был бы невозможен без поддержки наших партнёров!
Благодарим партнёров программы:AM Group, Kerama Marazzi, Manders, Espocada, Dea Design, MercuryStone, Boca Room, Императорский фарфоровый завод, I-Design Awards, VEKA Rus, Алютех, Tanu, Студию 40. И наших информационных партнёров Hi home и Архдиалог.
Особую благодарность выражаем генеральному партнёру D+A Tour — Knauf — за стратегическую поддержку и вклад в развитие отрасли в регионах.
Спасибо за доверие, вовлечённость и готовность вместе развивать профессиональное сообщество!
#datour#mosbuild
Фотографии с мероприятий D+A Tour в Алматы уже доступны на MosBuild Connect
Урбан-тур по новым жилым объектам города, звездная деловая программа — смотрите, как прошел D+A Tour в Казахстане!
➖Урбан-тур — https://clck.ru/3Qc7Jd
➖Деловая программа — https://clck.ru/3Qc7Md и https://clck.ru/3Qc7Nv
Фотографии из других городов региональной программы вы также можете найти в разделе «Контент» онлайн-сообщества MosBuild Connect
#datour#mosbuild
D+A Tour в Алматы: вдохновляющий диалог об архитектуре и дизайне состоялся
20–21 ноября прошёл яркий D+A Tour. Участники погрузились в насыщенную программу: от эксклюзивного Урбан-тура от партнеров мероприятия «Студии 40» до выступлений ведущих экспертов отрасли
Первый день тура включил посещение ЖК Dream City Family, ЖК Verdi и ЖК Dostyq 300, где гости смогли оценить современные архитектурные решения и градостроительные подходы
Деловая часть программы прошла в пространствеImagine. Слушателей ждали лекции о главных тенденциях в дизайне, развитии студий, готовых интерьерных решениях и роли технологий в архитектуре.Средиспециальных гостей D+A Tour — амбассадоры MosBuild Михаил Шапошников и Диана Балашова, а также представители экосистемы TANU, партнеров региональной программы в Алматы
Событие завершилось вдохновляющим интервью и неформальным общением участников — D+A Tour вновь подтвердил свою роль как международной площадки для обмена опытом, идеями и новыми профессиональными связями
До встречи в следующем городе!
#datour#mosbuild
Перед тем как D+A Tour пройдет на юге России, давайте вспомним как региональная программа прошла в Новосибирске!
Все фото- и видеоматериалы с мероприятия уже доступны
в разделе «Контент» онлайн-сообщества MosBuild Connect
#mosbuild#datour