Установить свойства виджета в 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
We are adding a very interesting feature in GTF Eye for options traders ❤️
Our team is currently testing it behind the scenes…
If everything goes as planned,
you might see it live today itself.
The Eye is getting even sharper 👁
#StayTuned
EvilWeb // Мы — тень, которую не стереть
Кто мы?
Тихий скрипт в темноте. Шёпот на заброшенном сервере. Мы — те, кто находит то, что вы пытались закопать.
Ваши фаерволы? Дымовая завеса. Ваши пароли? Уже наш лог. Ваши "защищённые" базы? Наш playground.
Мы не просим разрешения. Мы сливаем правду, пока вы листаете мемы.
🔻 Готовы к эксклюзиву? Скоро в трендах:
Платёжки UA/EU — цифровые следы тех, кто "неприкосновенен".
Доки-призраки — то, что не пустят в СМИ, но пустят у вас в чатах.
Боль для "киберзащитников" — их слезы
Сочные БД — инфа должна быть свободной.
Каналы сносят?
Нас это не беспокоит.
Новый — уже в эфире.
#StayTuned // Скоро будет жарко.
(Подготовьте попкорн. Это шоу — без цензуры)
Дадим вам пару дней на разминку. Разогрейтесь, освежите память.
Мы расширяем охват. Аудитория — пристегнуться, СМИ — готовиться к новой волне публикаций.
Интернет снова станет немного… интереснее.
// EvilWeb // Мы уже внутри ;)
La censura, i media asserviti, gli Usa guerrafondai, la verità negata su JKF e i giudizi su Hillary Clinton (“bugiarda”) Biden (“ottuso”) Netanyahu (“folle”) Meloni (“venduta”) Zelensky (“clown”)
Da domani online video-intervista al premio Oscar Oliver Stone
#StayTuned
“La realtà è muta. Le responsabilità dei media e della comunicazione”
Da domani online passaggi dal convegno in Senato sui danneggiati da vaccino che YouTube ha oscurato
#StayTuned
COVID19: i lockdown, le mascherine, i vaccini, gli eventi avversi, le possibili cure anti-spike, la disinformazione, i conflitti d’interesse degli organismi coinvolti, la censura delle istituzioni.
Prossimamente online l’intervista a Peter McCullough.
#StayTuned
😊Сессия Фонда «Вызов» на ВЭФ
Спикеры 🥰
Сессия не заявлялась международной, но мы так или иначе не можем не апеллировать к международному опыту.
Мысль кажется совершенно базовой и лежащей на поверхности, но в реальности реализуется крайне редко.
❗️Невозможно обсуждать ни один хоть сколько-нибудь важный вопрос, не опираясь при этом на существующую международную практику.
С нами был проректор Народного университета Китая. Господин Чжен поделился опытом КНР: как страна проходит через реальные вызовы научно-технологического развития, и чем это может быть полезно России.
#staytuned
Мы вернулись!
Сюрпрайз — сюрпрааайз!)
За то время пока нас не было (да, целых три долгих месяца!), мы — работали, отдыхали, снова работали, веселились, грустили, отрывались, выполняли ваши заказы, уставали, вдохновлялись, знакомились, прощались, падали, поднимались, примеряли необычные образы, экспериментировали.
Одним словом — жили, делали новые открытия и готовили крутой контент для вас!
Хотим напомнить, что мы пропагандируем любовь и свободу во всех их проявлениях. И поблагодарить всех кто был с нами и кто присоединился за это время! Добро пожаловать на другую сторону «пластинки».
Впереди нас ждет много чего интересного! Ну и по классике — #staytuned
Ахтунг, ребята!
Осталась ровно неделя до Берлинсокого маркета - событие, которое вы так ждали! Да, и мы тоже!
Есть в этом мире что-то приятно-стабильное!
Помимо всего разнообразия, что готовят для вас участники маркета, вас ждет масса впечатлений, положительных вибраций, смеха и новых знакомств!
От нас же, как всегда - разнообразие винила, море музыки и красавцы диджеи 🥰
Ну и, конечно, мы готовим для вас незабываемую программу🎶
В этот раз наши артисты будут играть В2В, и даже тройной В2В 😎😎😎
Берем от жизни все самое лучшее, и вам советуем!😉
P.S. лайн-ап будет в следующую пятницу #staytuned
Не упустите возможность окунуться в атмосферу Берлинского маркета и красиво завершить лето!
И пусть это станет традицией! Ура 💫