Установить свойства виджета в 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
Allie Windwick and Hugh Inkster — Music from the Orkney Islands (Folkways Records, 1979)
#traditional#fiddle#guitar#mandolin#Orkney#Scotland#UK
Оркнейские острова — архипелаг в 16 км к северо-востоку от Шотландии. Более семидесяти островов лежат между Великобританией и Шетландскими островами, на границе Северного моря и Атлантики. Раньше здесь говорили на ныне мёртвом языке норн. В настоящее время жители архипелага пользуются оркнейским диалектом англо-шотландского языка или, как выражаются сами островитяне, оркадианским диалектом, включающим большое количество древнескандинавских слов.
Спросите оркнейца, считает ли он себя шотландцем, и вы услышите твёрдое «нет». Хотя формально Оркнейские острова являются частью Великобритании, и их отделяет от Шотландии лишь бурный пролив Пентленд-Ферт, между архипелагом и остальной страной существует нечто большее, чем простая полоса воды. Оркнейцы не забыли о своём скандинавском происхождении. Даже флаг здесь — вариация скандинавского креста. Это наследие, вкупе со спокойным, но упрямым чувством независимости, помогает жителям сохранять неповторимую самобытность своего мира.
На сборнике Music from the Orkney Islands композиторы Элли Виндвик и Хью Инкстер исполняют собственные сочинения и традиционные песни Шотландии, Оркнейских и Шетландских островов, а также Швеции. Виндвик играет на мандолине в девяти композициях, Инкстер — на скрипке в десяти. Нэнси Касселл аккомпанирует на гитаре, а Билли и Ингирид Джолли поют на местном диалекте.
🔗Spotify | AppleMusic | Telegram
Various Artists — Industrial Strength Bluegrass (Folkways Records, 2021)
#traditional#bluegrass#banjo#fiddle#mandolin#appalachian#Ohio#United_States
Industrial Strength Bluegrass рассказывает о том, как выходцы из Аппалачей, переехавшие на юго-запад Огайо в середине XX века, принести с собой музыку блюграсс и вплели её в ритм индустриального города. Песни альбома отражают жизнь мигрантов, проходящую между заводскими цехами и субботними вечерами с банджо; передают ностальгию по родным горам; показывают, как блюграсс адаптировался в новом окружении, не теряя своей музыкальной сути.
Альбом спродюсировал музыкант и радиоведущий Джо Маллинз, а в записи приняли участие многие звезды современного блюграсса, включая Ронду Винсент,Бобби Осборна и самого Маллинза. Расширенное виниловое издание альбома включает архивные записи The Stanley Brothers,Larry Sparks,Red Allen & The Allen Brothers, которые помогают еще глубже погрузиться в музыкальный контекст «индустриального блюнрасса».
🔗AppleMusic | Spotify | YouTube | Deezer | TIDAL | Bandcamp
Singers and Ensembles of Radio Ankara — Songs and Dances of Turkey (Monitor Records, 1996)
#traditional#baglama#clarinet#darabukka#fiddle#kaval#kemenche#saz#spoons#zeybek#tamzara#Turkey
Перед нами — энциклопедия турецкой народной музыки, собранная силами Радио Анкары. Турецкая музыкальная традиция вобрала в себя наследие Центральной Азии, Кавказа и десятков народов, прошедших через Анатолию за тысячелетия. В ней легко узнать и античные дорийский, эолийский и фригийский лады, и модернизированную персидскую микротональную традицию, и древние степные напевы.
На записи представлены регионы от восточного Карса, некогда столицы армянского царства, до суфийской Конии в центре страны; от горного Адыямана на юго-востоке до равнинных областей Анатолии. Здесь звучат степенные героические зейбеки (zeybek), звонкий «ложечный» кащик-хавасы (kaşık havası) и круговая тамзара (Թամզարա) — традиционный кавказско-анатолийский танец. Короче говоря, этот проект Радио Анкары соединяет разрозненные голоса и ритмы в целостную звуковую картину Турции.
🔗Spotify | AppleMusic | Telegram
The Brothers Nazaroff — The Happy Prince (Folkways Records, 2015)
#traditional#freilach#klezmer#accordion#mandolin#fiddle#payk#guitar#tzouras#ukulele#yiddish#jew#Ukraine#Russia#United_States
Эта запись — дань уважения Натану «Принцу» Назароффу. В 1954 году в Штатах он выпустил пластинкуJewish Freilach Songs и таким образом познакомил самый широкий круг слушателей с фольклором восточноевропейских евреев. До сих пор работа Назароффа остаётся чуть ли не единственной, на которой представлен музыкальный стиль Одессы и других портовых городов Черного Моря.
Международная супергруппа The Brothers Nazaroff, в состав которой входят Дэниел Кан, Псой Короленко, Майкл Альперт, Джейк Шульман-Мент, Боб Коэн и Хампус Мелин, вдохнула новую жизнь в наследие «Принца». «Братья» уверены, что эти песни заслуживают внимания и особого места в современной еврейской культуре.
Майкл Векс — автор крупнейшего исследования идиша Born to Kvetch. В своих заметках об альбоме Назароффа отмечает следующее:
Если бы в начале 1950-х годов в Америке существовали группы, исполняющие в барах песни на идише, то они звучали бы именно так
Братья Назарофф — как раз такая группа, но только из XXI века.
🔗Spotify | AppleMusic | Bandcamp
Various Artists — Songs and Dances of Yugoslavia (Folkways Records, 1951)
#traditional#accordion#clarinet#fiddle#kaval#tambura#tamburica#violin#gusle#tamburica#Serbia#Bosnia_and_Herzegovina#Montenegro#Croatia#Macedonia#Slovenia#Yugoslavia
В 1951 году музыковед Лора Болтон записала традиционную музыку из всех шести республик бывшей Югославии — Сербии (треки 2, 3, 9, 10, 11 и 13), Македонии (треки 7 и 15), Боснии и Герцеговины (треки 1, 4 и 12), Черногории (трек 8), Хорватии (треки 5 и 6) и Словении (трек 14). На её пластинке представлены вокальные композиции, оркестровые произведения и записи балканских народных инструментов, таких как гусле и тамбурица.
🔗Spotify | AppleMusic