Установить свойства виджета в 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
Завтра. 24 мая. Пхукет.
Сообщите своим друзьям, отдыхающим/проживающим в Таиланде. Вход бесплатный.
ARTEM POPOFF – vocalist of the legendary band ILWT, creators of cult hits like «All Your Friends», «Infernal Women», and «Granny Valya Went Off the Rails, So Should You». He’s also half of the musical duo APPLY and, above all, a true gentleman. ARTEM will deliver a special DJ set at COURAGE, a new bar in Phuket Town.
Joining him: his longtime friend ERICK TRODLY, POPASUDA with his infectious blend of Bass, UKG, and Jamaican-rooted rhythms (yes, ILWT fans will recognize the name!), the return of LUTANG after a short break, and of course, F-WORD on deck as well.
And don’t miss the photo exhibition «Nothing Sacred» by Nikita Puzakov happening the same night upstairs in the very same venue.
The stars are aligned – be there.
SUB: UK GARAGE / BREAKS / BASS / 2-STEP / BASSLINE / BREAKBEAT / DUBSTEP / UK FUNKY
Lineup:
ARTEM POPOFF [ILWT / APPLY]
F-WORD [Bassrock Records]
ERICK TRODLY
POPASUDA
LUTANG
24 May, Saturday
Courage Bar | Phuket Town
G.Maps: https://maps.app.goo.gl/Ta2ZMLwcgrMKVjLa8
9 pm - late
FREE ENTRY
Facebook event: https://www.facebook.com/events/2123408598122380
#ukgarage#bassmusic#breaks#breakbeat#ilwt
После концерта распитие тайской бомбовой, хоровое пение, женский слэм и, возможно, исполнение сольных песен Артема.
Ждём Вас!
Oi oi massive🤙🤙🤙
ЭТО REWIND: WINTER SPECIAL🎅💨❄❄❄
20 декабря и всего на одну ночь бар @iemigro (Эмиграция) превратится в настоящий лондонский бейсмент, где наши селекторы бок о бок будут играть лучшие пластинки за 2025 год
UK Garage/ 2Step/ Breakbeat /Electro/ Jungle
Только чистый стиль и жирный бас, который расшевелит даже самых ленивых
За пультом парни, которые знают, как надо крутить пластинки:
🎧 BR SELECTA б2б FLAT б2б SLIDER б2б DMITRY V🎧
🗓 Дата: 20 декабря (суббота)
🕙 Старт: 22:00
📍 Локация: Бар «Эмиграция» Почтовый съезд, 3
#rewind_nn#ukgarage#2step#breakbeat#electro#jungle#nnov#party
Sarah Haras — Mirage (Chinabot, 2021)
#khaliji#idm#drone#breakbeat#dancehall#noise#post_industrial#concrete_music#granular_synthesis#Bahrain
Сара Харас ставит музыку на радио Ma3azef, а в своём творчестве пытается передать ощущение мира, каким оно открывается арабской женщине. Mirage — третий альбом Сары Харас, на котором она исследует музыку халиджи, добавляя в неё элементы брейкбит, дрона, нойза, постиндустриала, конкретной музыки и гранулярного синтеза. Фольклор халиджи, зародившийся в центральной и восточной Аравии, вобрал в себя культуру африканских мигрантов. Пение и барабаны халиджи во время праздников звучат по всему Бахрейну. Влияние традиции особенно заметно в треках Sahra и Mutated Samri, первый из которых основан на гипнотическом ритме, постепенно достигающем пика интенсивности. Mta Bnroo7 и Euphoria напоминают о порывах горячего воздуха, проносящихся над пустыней. А вот в Wish That I, наоборот, слышна клубная музыка Бахрейна и дэнсхолл.
🔗Spotify | AppleMusic | Bandcamp