Установить свойства виджета в 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
Episode 1: She’s in his hoodie, sitting cross-legged on the kitchen counter while he flips pancakes. Music plays low, something nostalgic. She sways, miming the lyrics with lazy exaggeration. He grins—half amusement, half adoration. There’s no rush. No plan. Just the rhythm of a morning made soft by love.
❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️
We keep finding heaven in the smallest things.
❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️
#lovelived#iloveyou
Episode 16
The villa deck hums with sunlight, the ocean below impossibly clear — liquid turquoise stretching forever. He hits the water first, surfacing with a splash and boyish triumph, pushing wet hair from his eyes.
“Come on!” he calls, treading water, arms open like the sea is his idea.
She sits at the top of the slide, toes curled over the edge, laughter already bubbling in her chest. The world feels weightless up here — sky, water, horizon all blending into one endless promise. She looks at him, glowing down there, and shakes her head like she can’t believe this is real.
He cheers louder. She leans back, breath caught between thrill and trust — and lets go.
If you jump, I jump. Every lifetime.
📖 Read on Wattpad
🎧 Love, Lived I Album
#lovelived#lovelived2#theeverydaymagic
❤️ YouTube | Instagram ❤️
Episode 15
Thursday afternoons belong to sugar and sunlight. They don’t debate flavors anymore—she reaches for hers, he for his, like muscle memory. The shop owner already knows their order. They walk slowly, cones melting faster than planned, shoulders brushing, trading bites without asking. Workdays soften. The week exhales. Love tastes like something cold and sweet, shared halfway down the block.
Traditions are just love that learned the schedule. 🍦✨
📖 Read on Wattpad
🎧 Love, Lived I Album
#lovelived#lovelived2#theeverydaymagic
❤️ YouTube | Instagram ❤️
Episode 14
The kitchen smells like garlic and sun-warmed tomatoes. She stirs the pasta with one hand, dancing slightly to a morning playlist. He sits at the table, laptop open but eyes drifting. The new vase sits between them, holding sunflowers like a little sun of its own. He types. She tastes. The space hums—spoon clinks, keys click, love simmering in the background.
A bouquet, a bowl of pasta, and you across the table. Perfect.
📖 Read on Wattpad
🎧 Love, Lived I Album
#lovelived#lovelived2#theeverydaymagic
❤️ YouTube | Instagram ❤️
Episode 13
She wakes to the smell of something warm, sweet, familiar. The dining room glows—sunlight spilling in through the floor-to-ceiling glass wall, kissing every detail he carefully placed: fresh fruit gleaming in bowls, milk in a glass pitcher, her favorite breakfast dish plated like art, dessert waiting with a ribbon on the side, the sunflower-filled vase watching quietly.
He stands there—apron still crooked, cheeks a little pink.
“I want you to break your fast with your favorite dish made by me. I poured all my love into it. Happy birthday, my love.”
She doesn’t sit right away.
She hugs him first. Slow. Long. Like she tasted the love before the food.
This morning, love tasted homemade.
📖 Read on Wattpad
#lovelived#lovelived2#theeverydaymagic
Episode 12
The beach is empty—except for them. Lanterns flicker in glass jars, fairy lights drape over driftwood like fallen stars. A small table for two sits on a sand-carved rug, scattered with rose petals and sea breeze. She stops walking, hand over her mouth, dress brushing the shore. He watches her—not the waves, not the lights—her. She turns, eyes glossy, and breathes, “This feels unreal.” He smiles. “Then we’re right on time.”
The world paused—so we could celebrate you.
📖 Read on Wattpad
#lovelived#lovelived2#theeverydaymagic