Установить свойства виджета в 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
Я нашла ее - идеальную тушь для своего макияжа🙌🏻
Эффект WOW был, девочки
Удлиняет, придает объём и самое главное, дарит тот самый яркий и притягательный взгляд!
Просто посмотрите на мое до и после 🤍
И все благодаря ей Pupa Vamp! Lash Extender, которую хотят все
Заказать можно здесь
Я уверенна эта тушь останется в твоей косметичке надолго!
#vamplashextender#pupamilano#pupalovers
девочки, это восторг!
никогда бы не подумала, что тушь может настолько увеличить мои ресницы, настоящий эффект вау!
тушь Pupa Mascara Vamp! Lash Extender - настоящая находка для тех, кто не хочет делать наращивание, но хотел бы иметь более яркие и густые ресницы
тушь приподнимает их, придает им объем и удлиняет на 90%!
оставляю для вас ссылку, приобрести можно будет в ЗЯ💙
#vamplashextender#pupamilano#pupalovers
найдена тушь с ВАУ-эффектом и феноменальным объёмом!
Pupa Vamp! Lash extender@pupamilanorussia:
• силиконовая щёточка прокрашивает каждую ресничку без склеивания и комочков
• густая формула подкручивает ресницы, удлиняет, даёт объём от корней
• легко наслаивается🤌🏻
• не осыпается и не отпечатывается!
• при этом легко смываемся
ну а какой красивейший футляр💜
однозначно рекомендую!
купить уже можно в Золотом Яблоке
#vamplashextender#pupamilano#pupalovers
Нереальная новая тушь от Pupa - Mascara Vamp! Lash Extender💔
я думаю без слов понятно, почему она мне так понравилась, эффект до/после просто ВАУ 💔
объем, разделение, удлинение и шикарная стойкость в течение дня а ещё супер гибкая щеточка, которая прокрашивает каждую ресничку !
Вы точно должны попробовать, а купить ее можно в РИВ ГОШ
#vamplashextender#pupamilano#pupalovers
Реклама, ООО «КОСМОТРЕЙД», ИНН: 7725628885, erid: 2VtzqvTdBkv
тестирую самую громкую новинку осени от @pupamilanorussia
тушь PUPA vamp! lash extender
• силиконовая щеточка с заостренным кончиком, прокрашивает и приподнимает ресницы от самых корней
• можно наслаивать для wow-эффекта
• насыщенный черный
• не осыпается, смывается без <эффекта панды>
уже доступна в Золотом Яблоке
#vamplashextender#pupamilano#pupalovers
😎 LASH BOSS 😎 ЗДЕСЬ?
Стойте-ка, сейчас появится та самая, которая перевернет мир...
Ах, вот и она! Тушь VAMP! LASH EXTENDER!
🔥 Непревзойденный объем
🔥 Бесконечно длинные ресницы
🔥 Насыщенный черный
Как сильно вы хотите ее попробовать от 1 до 10? А кто уже?
#pupamilano#madeinitaly#vamplashextender#vampmascara
Пришло время обновить ваши ресницы
➡️
➡️
➡️VAMP! LASH EXTENDER
Тушь, которая формирует и приподнимает ваши ресницы в измерении 3D!
Отметьте вашу лучшую подругу, которой она тоже очень нужна!
#pupamilano#madeinitaly#vamplashextender#vampmascara