Установить свойства виджета в 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
It is 'Telegram Thursday' and I want to recommend you interesting channels.
Today there is a fresh channel, focusing on the Scottish aspect of European culture:
https://t.me/beautiful_scotland
Have a look and follow this channel! It has lots of original content.
#Scottish#TelegramThursday
@EuropeanTribalism
#Ethiopia aid worker tells of daily struggle to find water in land littered with cow skulls
A #Scottish aid worker who recently visited Ethiopia has told of the harrowing daily struggles people face there to get safe water. Ben Wilson of the Scottish Catholic International Aid Fund (#SCIAF), who visited the #African nation last June, told of landscapes devastated by drought and littered with the skulls of dead cattle.
It comes as the charity’s annual Wee Box appeal this Easter focuses on water, with Scots urged to give generously to fund taps and wells in some of the world’s poorest nations. SCIAF is also urging Keir Starmer to reverse his controversial move to slash international aid to 0.3 per cent of national income - the lowest level since 1999 - in order to boost defence spending.
Ben told the Sunday Mail: “Water poverty is still such a huge problem around the world, with hundreds of millions of people.........
https://www.dailyrecord.co.uk/news/scottish-news/ethiopia-aid-worker-tells-daily-36969445
Shovel Dance Collective — The Shovel Dance (American Dreams Records, 2024)
#country#avantfolk#irish#scottish#english#England#Ireland#Scotland#United_Kingdom
Shovel Dance — второй альбом лондонского коллектива Shovel Dance Collective, который занимается изучением и переосмыслением народных традиций Англии, Ирландии и Шотландии. Группа работает без единого лидера, подчеркивая таким образом дух коллективного творчества, присущий фольклорной культуре. В состав входят девять участников, которые в работе над альбомом использовали 25 инструментов, а вокальные партии исполнялись восемью из них.
Альбом опирается на музыкальные источники, датируемые XVII веком и более ранними периодами, органично соединяя их с современными влияниями. Так, в музыке коллектива угадываются отсылки ко многим артистам XX века: Скотту Уокеру, начавшему карьеру как поп-исполнитель в 60-х, но позже экспериментировавшему со звуком и формой; Swans, экспериментальному постпанк-коллективу из Нью-Йорка; Ширли Коллинз, британской фолк-певице и исследовательнице народной музыки; Берту Ллойду, исполнителю и собирателю английских народных песен. Эти цитаты подчёркивают стремление Shovel Dance Collective навести мосты между традиционной музыкой и современными звуковыми решениями, чтобы отразить актуальность фольклора не только через тексты, но и через звучание.
Альбом открывается композицией Abbots Bromley Horn Dance — переосмыслением музыки к древнему английскому праздничному танцу, традиционно исполняемому с оленьими рогами и минимальным аккомпанементом. Группа превращает его в сложное инструментальное произведение, достигающее крещендо, прежде чем перейти к песне The Worms Crept Out времен Первой мировой войны, посвященной размышлениям о смерти.
На протяжении всего альбома музыканты исследуют, как фольклор может отражать социальные и исторические проблемы, актуальные как в прошлом, так и в настоящем. Например, в треке The Four Loom Weaver это проявляется через рассказ о людях, потерявших работу во времена промышленной революции. Хоть с тех пор минуло много лет и мы давно живем в постиндустриальную эпоху, люди продолжают терять работу. Музыканты верят, что старые народные песни могут стать источником утешения и помочь справиться с несовершенствами жизни.
🔗AppleMusic | Spotify | YouTube | Deezer | TIDAL | Napster | Amazon | Bandcamp | Telegram