Установить свойства виджета в 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
😄Character
➖➖➖➖➖➖
Character is a noun and it can mean:
🔘 'a person in a book or a film'
🔜The best friend is my favourite character.
🔘‘the quality that makes someone who they are’.
🔜He has a forgiving character.
🔘someone who is mentally strong can 'have a lot of character' or 'be a strong character'.
🔜She'll be a great manager; she has a lot of character.
🔜You'll need to be a strong character to get through this challenge.
🔘‘the quality that makes places and things interesting, different or attractive’.
🔜It's a beautiful village, full of character.
#Character👨🏫@America
➖➖➖➖➖➖➖➖➖➖➖➖
🆕 Crypto News @Money
😁 Crypto Game @Egame
🇺🇸 US News @America
🇯🇵 Japan News @Japan
🇦🇪 UAE News @Dubai
▶️ Popular Movies @Videos
😜 Best Funny Video @Funnys
Discord @casajordi Midjourney #character Photography, masterpiece of black and white soft portrait photography, art by Irving Penn A chic Bengal Tiger with fashion dress, clothes by Balenciaga, ultra realistic minimalist fashion photography, art by mario testino for vogue, chic, elegant, haute couture, natural light, minimalist background
@midjourney • @midjourney_ru
Discord @madhutungnirun Midjourney #character art russia, angel, portrait, painting, art deco, russianart, french art digital painting, in the style of light sky-blue and light gold,, photorealistic fantasies, princesscore, elegant, emotive faces, rococo portraitures, close up, soft, romantic scenes
@midjourney • @midjourney_ru
Discord @y0844 Midjourney #character cute monkey monster wearing Chinese martial arts costumes, Chinese Wuxia, Chinese painting style, cartoon IP, movie lights, clean white background, advanced color scheme, octane rendering, full body, Extreme detail, Kung Fu, surrealism, 3D, Behance, Pinterest, trendy blind box toys, award winning
@midjourney • @midjourney_ru
Discord @johnjbamboo Midjourney #character color streetphotography of a person in Shanghai, in the style of Magnum Photo with motion blur and foreground blur, reflections
@midjourney • @midjourney_ru
Discord @apptist Midjourney #character A cute, simple toy-like pink hippo face with a white background. The hippo's mouth is wide open, showing smooth, toothless gums. It has big, expressive eyes, a rounded snout, and a cheerful expression. The face is bright pink and smooth, with no body parts visible. The design is playful and inviting for a children's game
🐟 t.me/midjourney_ru
🐽t.me/midjourney_character
🐟t.me/midjourney_dark
Discord @centaur509 Midjourney #character Studio portrait photography of an old indian woman on a dark background, wearing a white shirt, with projection mapping onto her back. The image projected onto the back is a crowd of people
@midjourney • @midjourney_ru
Discord @superpedro4711 Midjourney #character etherreal ultra realistic futuristic eloquent cute adorable small Flying Squirrels with a huge human smile and big beautiful dreamy eyes eating Layer rice, sweet and sour chicken, pineapple chunks, and bell peppers. Top with sesame seeds and green onion, sitting in fantasy world, dark blue-purple sparkling tones background, lens flare, diffused lighting, fantasy, intricate, highly detailed, lifelike, concept art
@midjourney • @midjourney_ru