Установить свойства виджета в 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
Milf's Plaza
🆕Обновление
Игра длявзрослых 🔞, в которойвы сможете принять участие в приключениях юного авантюриста, живущего в большом городе и готовым на все ради достижениясобственного успеха, даже на самые грязные поступки..
⚙️Полная версия. Кэш встроен в установщик. В настройках можно выбрать 🇷🇺 русский язык. Кэш встроен в установщик. #MilfsPlaza
#18plus@pm_plus
#MilfsPlaza@pm_plus
📱Play Market +
⚡️ НАШ ЧАТ
Shelter 69
🆕Обновление
Игра с ограничением 🔞 и отличной графикой, в которой вам предстоит построить подземный бункер для защиты от ядерной катастрофы, а затем управлять и развивать его. Скучно точно не будет, ведь "выживать" вам придется вместе с симпатичными девушками..
⚙️Мод меню: увеличенные награды..
Для начала игры необходимо зарегистрироваться (можно указать любую почту и пароль, они потребуются только для запуска игры). При первом запуске не забудьте дать разрешение игре на отображение поверх других окон.
#18plus@pm_plus
#Shelter69@pm_plus
📱Play Market +
⚡️ НАШ ЧАТ
MILF's Plaza 2
🆕Обновление
Продолжение популярной игры с ограничением 🔞, где главному герою выпадают новые испытания, ведь теперь он вынужден жить один, работать простым курьером и решать новые проблемы. Но новые друзья, пикантные знакомства и любовь не дадут герою заскучать.
⚙️Полная версия, не доступна в официальном Маркете. Есть 🇷🇺русский язык. Кэш встроен в установщик.
#18Plus@pm_plus
#MILFsPlaza@pm_plus
📱Play Market +
⚡️ НАШ ЧАТ
Shelter 69
🆕Обновление
Игра с ограничением 🔞 и отличной графикой, в которой вам предстоит построить подземный бункер для защиты от ядерной катастрофы, а затем управлять и развивать его. Скучно точно не будет, ведь "выживать" вам придется вместе с симпатичными девушками..
⚙️Мод меню: увеличенные награды..
Для начала игры необходимо зарегистрироваться (можно указать любую почту и пароль, они потребуются только для запуска игры). При первом запуске не забудьте дать разрешение игре на отображение поверх других окон.
#18plus@pm_plus
#Shelter69@pm_plus
📱Play Market +
⚡️ НАШ ЧАТ
Lust in suburbs
🆕Обновление
Игра сограничением 🔞 расскажетисторию молодого парня, который живет в приемной семье, и однажды решает, что хочет полностью изменить свою жизнь. Вот только что из этого получится, он пока даже не представляет..
⚙️Полная версия, всё открыто. Кэш встроен в установщик.
#18Plus@pm_plus
#Lustinsuburbs@pm_plus
📱Play Market +
⚡️ НАШ ЧАТ
Summertime Saga
🆕Обновление
Визуальнаянавела с контентом 🔞 рассказывающая историю простого студента, который случайно оказался в центре криминальных событий. Выполняйте разнообразные задания, качайтесь в зале, повышайте харизму и здоровье, и заводите новые знакомства...
⚙️Полная версия, мод на деньги. Кэш встроен в установщик.
#18Plus@pm_plus#SummertimeSaga
#SummertimeSaga@pm_plus
📱Play Market +
⚡️ НАШ ЧАТ
Attack on Survey Corps
🆕Играс ограничением 🔞 по мотивам вселенной Attack on Titans, где уже знакомые герои будут участвовать в различных миссиях и заданиях, которые помогут им хорошо узнать друг друга и, возможно, познакомиться еще ближе..
⚙️Полная версия, недоступна в официальном Маркете. Кэш встроен в установщик.
#18Plus@pm_plus
#SurveyCorps@pm_plus
📱Play Market +
⚡️ НАШ ЧАТ
Anime Hot Resort
🆕Играс ограничением 🔞 где вы в роли нового сотрудника эксклюзивного тропического курорта окажетесь в окружении хорошо знакомых героев популярных аниме, многие из которых совсем не прочь расслабиться в отпуске и познакомиться с вами поближе..
⚙️Полная версия, недоступна в официальном Маркете. Кэш встроен в установщик.
#18Plus@pm_plus
#AnimeHotResort@pm_plus
📱Play Market +
⚡️ НАШ ЧАТ
Tales of Home
🆕Игра с ограничением 🔞 в которой главный герой пытается сохранить семью и раскрыть секреты отца после его смерти. Оказывается, даже случайная запись в дневнике может полностью перевернуть представление о человеке..
⚙️Полная версия, всё разблокировано. Кэш встроен в установщик.
#18Plus@pm_plus
#TalesofHome@pm_plus
📱Play Market +
⚡️ НАШ ЧАТ
Horny Villa
🆕Обновление
Игра для взрослых 🔞 в которой вам предстоит заняться строительством и дизайном собственной виллы, попутно решая различные головоломки и общаясь с симпатичными девушками..
⚙️Мод меню: заморозка энергии и денег. При первом запуске не забудьте дать разрешение игре на отображение поверх других окон..
#HornyVilla#HornyVilla@pm_plus
#18Plus@pm_plus
📱Play Market +
⚡️ НАШ ЧАТ
Witch Trainer
(Тренер Ведьмы)
🆕Обновление
Игра по мотивам Гарри Поттера с контентом для взрослых 🔞 в которой вы станете управляющим весьма необычной школы магии, где учится множество интересных девушек, лишенных всяческих комплексов..
⚙️Полная Silver версия. Кэш встроен в установщик.
#18Plus@pm_plus
#WitchTrainer@pm_plus
📱Play Market +
⚡️ НАШ ЧАТ
Witch Hunter
(Охотник на ведьм)
🆕Обновление
Игра для взрослых с меткой 🔞, где главный герой, скрывающийся в образе простого библиотекаря, займется поиском и уничтожением опасных ведьм. Для достижения своих целей главный герой не остановится ни перед чем..
⚙️Полная версия. Кэш встроен в установщик.
#18Plus@pm_plus
#WitchHunter@pm_plus
📱Play Market +
⚡️ НАШ ЧАТ