Установить свойства виджета в 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
Завтрак утром, бар вечером? В Питере другие правила...
⠀
Наша студия реализовала уникальный проект для нового ресторана в центре Санкт-Петербурга.
⠀
Prosa Breakfast Bar – атмосферное место напротив Спаса на Крови, где вы можете окунуться в атмосферу викторианского стиля, созданного Андреем и КсениейКарельскими.
⠀
🪟 Разработанный нами логотип повторяет формы оконных рам и обрамления картин, подчеркивая детали интерьера.
⠀
В рамках проекта был создан уникальный паттерн, отсылающий к интерьерам европейской культуры, где зачастую можно увидеть живые деревья во дворах уютных ресторанов.
⠀
Все это органично отобразилось на всех носителях, таких как: меню, стаканы, стикеры или даже барная стойка.
⠀
Рекомендуем к посещению!
📍 Санкт-Петербург, наб. канала Грибоедова, 5
#lupo#lupodesign
Надо бы ребрендинг сделать. Но и сайт тогда придётся обновлять.
Ребята из Eleon справились с первой задачей, а мы помогли реализовать вторую.
Одностраничный сайт производителя со всем необходимым функционалом уже вышел в свет. Удобный и яркий – что ещё нужно для современного бренда?
На сайте можно ознакомиться со всей подробной информацией: список вкусов и их описание, позиционирование бренда, контакты и прочее.
+600к к продажам обеспечено!
#lupo#lupodesign
🎸 По настоящему роковой логотип.
Сотворили умопомрачительное лого для Трёхи, блогера в кальянной индустрии, который ведёт популярный YouTube-канал Rock Love Hookah.
Дима один из немногих тру поклонников данного жанра музыки, поэтому логотип напрямую отражает его любовь к этой культуре.
⠀
Буква «ё», в красном цвете, под видом всеми известного жеста идеально вписалась в нашу идею с использованием медиатора вокруг лого.
Логотип сразу же начал использоваться не только в онлайн жизни, но и в офлайн. Например, они изготовили крутой мерч совместно с компанией Tongs Wear.
⠀
#lupo#lupodesign
🧁 Приготовили действительно вкусное лого!
Разработали логотип для кондитерской в Казани La Retta
Нежный, сливочный, аппетитный логотип с сахарными палочками, чтобы вот совсем сладко было.
Логотип ужа вовсю используется в реальной жизни (если ты ещё не выпал из неё, как мы).
Визитки, наклейки, воздушные шарики, упаковка для замечательных тортов, и даже на выставку сделали крутую вывеску, которая светится, вау, короче.
Также, сделали несколько внутренних заданий для бренда, например, тематические открытки, приуроченные к священному месяцу Рамадан.
#lupo#lupodesign
Бог есть? Ну кто-то же создал этот логотип…
⠀
С божественными усилиями мы разработали логотип и фирменный стиль для российского производителя чаш с внушающим названием – Тор.
⠀
Исторический. Сильный. Божественный.
⠀
Логотип заключает в себе силу и крепость Мьёльнера, молота скандинавского бога Тора, в свою очередь напоминающего силуэт чаши.
⠀
Неповторимый, как каждый удар молнии, патерн заключает в себе всю мощь богов.
⠀
Мы считаем, что у каждого бренда должна быть такая же мощная история за спиной. Это определенно путь к успеху.
⠀
Чаши уже в продаже. Подробнее ознакомиться с условиями можно у них в Инстаграме.
⠀
#КрепкиеКакМолотТора
#lupo#lupodesign