Установить свойства виджета в 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
WAKANDA : THE REBIRTH
ВТОРОЙ СПЕЦИАЛЬНЫЙ ГОСТЬ: PLANAS ИЗ КУБЫ! 🇨🇺
Мы не останавливаемся на достигнутом! Представляем второго артиста, который взорвет ваш музыкальный мир:
PLANAS — легендарный кубинский перкуссионист, который добавит в наш вечер огненные латинские ритмы и невероятную энергетику! Его выступление — это настоящая магия живого звука, которая заставит танцевать даже тех, кто этого не планировал! 💃🕺
⚡ УСПЕЙТЕ ЗАБРОНИРОВАТЬ ВЫГОДНО!
Уже в ПОНЕДЕЛЬНИК цены на билеты вырастут! Это ваш последний шанс посетить вечеринку по самой приятной цене!
https://spb.qtickets.events/198961-santa-barbara-x-wakanda
🎫 Early Bird билеты еще в продаже, но их осталось совсем немного!
#wakanda#rebirth
Так у нас ещё одна дата премьеры оглашена, «Возвращение из Ледяного озера» стартует 8 апреля.
Ну, думаю, про сон на апрель можно официально забить.
#Возрождениеизледяногоозера#Rebirth
Завершились съёмки «Возрождение из ледяного озера | Rebirth». Это сиквел «Легенды о Чу Цяо», и я не до конца разобралась, можно ли смотреть «Возрождение», не смотря при этом «Легенду». Ну, начну смотреть, если не пойму, то пойду уже в первую дораму.
Из интересного: «Легенда о Чу Цяо» и «Возрождение из ледяного озера» сняты по новелле «Секретный агент принцесса Чу Цяо» Сяосян Дунъэр, которую у нас готовит к выходу издательство Freedom.
#Любопытный_сериальчик#Возрождениеизледяногоозера#Rebirth
Посмотрела первые 3 серии «Возрождения Ледяного озера». Это, знаете, из разряда «А давайте выдадим всю жесть сразу же».
Уже в первой серии, когда одного из главных героев заставляют смотреть на отрубленные головы родных и признавать в них предателей, становится ясно: на позитив можно не рассчитывать. Слово «боль» здесь меркнет. В этот момент я кожей чувствую, почему его единственное желание — утопить этот мир в крови.
В общем, кто ещё не начал, готовьтесь, это будет тяжелая история.
Что касается вопроса «а поймут ли те, кто не смотрел первую часть?» — я как раз в их числе. Создатели реально заморочились для нас. Они не вываливают лор кирпичом, а дозированно вплетают экспозицию в действие: уже в первой серии кратко объясняют, кто кого за что ненавидит, у кого какие отношения, а потом понемногу докидывают флешбэки, расширяя картину. Непоняток нет.
Конечно, мы не получим такого глубокого бэкграунда, как те, кто смотрел первую часть. Для кого-то это просадка. Для меня пока не понятно, но мы, зрители-новички, можем ярко прочувствовать недоверие главной героини ко всему, что происходит, потому что она забыла всё, что было.
#Возрождениеизледяногоозера#Rebirth#Возрождение_из_ледяного_озера
After this reset, you will begin the New Earth timeline with new belief systems will guide you. But that is in the future.
For today, create boundaries with both the past and the future so you can simply be in this here and now moment.
The past no longer defines you. The future is what you decide upon.
Yah bless 🌹 Love Carolyn
✨ Get your FREE Quantum Energy Balancing & Tune-up https://www.144godcode.com/freebie
#timeline#newearth#reset#rebirth#therealyou #144000 #144GODCODE#APTTMH
Март подходит к концу, а значит, пора выбирать, на чем будем фиксировать свое внимание в апреле.
Первая — это, конечно, «Любовь за гранью смерти / Love Beyond the Grave», показ которой начнется 28 марта.
Дальше многострадальная «Завеса теней / Veil of Shadows»: то ли выйдет она в апреле, то ли не выйдет. Каждый день вокруг нее проблемы и слухи. Но я верю в что выйдет.
Ещё обещают в начале апреля «Возрождение из ледяного озера / Rebirth», склонна в это верить, уж много за последнее время контента по ней пошло.
Также проскальзывают слухи о выходе «Чаша весны / Cup of Spring», можно сказать, что её вообще не жду, но сейчас читаю новеллу, по которой она снята, и мне просто любопытно заглянуть в дорамку.
Ну и конечно, «Призрачный божественный сыщик / Shadow Punisher», где снялся Ло Юньси, тоже обещают выпустить в апреле.
И единственное, что не в историческом сеттинге, это «Исповедь в темноте / Light to the Night». Детектив, чтоб разбавить эту вечеринку халатиков.
#Любопытный_сериальчик#Любовьзаграньюсмерти#LoveBeyondtheGrave#Завесатеней#VeilofShadows#Возрождениеизледяногоозера#Rebirth#Чашавесны#CupofSpring#Призрачныйбожественныйсыщик#ShadowPunisher#Исповедьвтемноте#LighttotheNight