Установить свойства виджета в 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
Кто отжигал вместе с нами на шоукейсе 22 февраля от Solid Bangerz ?
Если да, то очень за вас рады, если нет, то предлагаем заценить видео! Ночь в клубе FACTORY 3 была жаркой!
Хэдлайнерами выступили OZMA из северной столицы, PLAGO из Таллина и 2Whales из Вологды!
Участники движа SVDj , Hell G , Infernal и Interceptor сами тоже отожгли как надо!
L.Kid , Moryakow , DNA88
TSP , InSpector , Changed Daily , Brain Wave и Tesla продемонстрировали мастерство чётких сводок!
ONEDER и Beels были у микро всю ночь и не переставали удивлять всех своей горячей читкой!
Оба танцпола были прокачаны по-максимуму! Яркие преимущественно кислотные и синие спецэффекты отлично дополнили драйвовую атмосферу рейва!
Спасибо большое за тусу, солидные, это было мощно, до встречи ещё в той же локации! Да-да, по секрету скажем, что 26 апреля намечается ещё одна туса в Севкабеле, ждём инфы!
#speaktobash#Solid_Bangerz#factory3#рейв
😈 Ола, Бэнгеры!
Сегодня у нас праздник русского днб мира, да и всей культуры ломанного ритма, с чем мы спешим вас поздравить и подарить 50 билетов на наше мероприятие, не жди удачу, хватай её за хвост!
Условия просты:
- любить Drum&Bass так же сильно как мы
- Подпишись на наш канал, канал Speak to Bash и жмякай кнопку участвую
Итоги розыгрыша будут подведены в 21:00 по Мск
С любовью к ритму и вам, Solid Bangerz!
#Solid_Bangerz#speaktobash#SPb_DNB#DNB#Drum_and_Bass#Lottery
Solid Bangerz: The Showcase в клубе FACTORY 3.
Прошло чуть больше месяца и нам не терпится посмотреть кадры, возвращающие в ночь 22 февраля и вновь ощутить ту незабываемую атмосферу! А освежить воспоминания нам поможет Aftermovie, снятый ребятами из команды Speak to Bash.
В эту ночь мы зажгли по-настоящему: два танцпола, топовые хэдлайнеры, отличный звук и аккуратно, но эффектно отстроенный свет! Мы нескончаемо рады, что вы разделили с нами наш первый большой опыт. Мы выложились по максимуму, чтобы зарядить вас энергией драм-энд-бейса и подарить океан эмоций.
Приглашаем всех на следующую вечеринку Solid Bangerz, которая состоится 26 апреля в клубе FACTORY 3. В этот раз будет еще жарче: лайнап пушка, артисты заряжены на полный разнос и уничтожение. Готовьте лапки, кроссовки и запас энергии! Следите за информацией в нашем TG канале и VK сообществе.
💬 Оставляйте в комментариях ваши топ-воспоминания 🚀
#Solid_Bangerz#SpeakToBash#Aftermovie#FactoryClub#DNB#SPb_DNB#Drum_and_Bass
😈 22.02.2025 - SOLID BANGERZ: The Showcase @ FACTORY 3
📌 г. Санкт-Петербург, Кожевенная линия, 40Д, клуб "FACTORY 3"
🎟 Билеты по ссылке
🎟 Следующее повышение цен 10.02.2025
‼️ Для комфорта гостей на вечеринке количество билетов строго ограничено
‼️ FC / DC / 18+
С любовью к ритму и вам, Solid Bangerz!
#Solid_Bangerz#Plago#Ozma#2Whales#Oneder#SpeakToBash#DimaBash#FactoryClub#DNB#SPb_DNB#Drum_and_Bass
Вчера сходил снимать первую вечеринку из, надеюсь, уже постоянной серии Atmosfear.
Всё это происходило в клубе Paradise — интересном и самобытном месте со своей атмосферой.
Для такого старта локация подошла хорошо.
На танцполе людей было не так много, но это ведь только начало.
У любой новой истории должен быть первый шаг.
По музыке и по настроению всё выглядело как попытка собрать в одной точке разные стороны Drum and Bass —
девять музыкантов, девять подач, девять состояний внутри одной ночи.
Я был там с камерой, снимал всё это движение, свет и людей.
И вот немного атмосферы вчерашней ночи.
А полный отчёт ищите у организаторов.
#speaktobash#димабаш#atmosfear#paradise#drumandbass#рейв#андеграунд#фотоотчет#санктпетербург#bashphoto