Установить свойства виджета в 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
☕️ В России смягчили требования ГОСТа к растворимому кофе #HP
Росстандарт утвердил обновленные нормы для популярного бодрящего напитка. Новые правила вступят в силу в ноябре текущего года и внесут существенные изменения в критерии оценки качества растворимого кофе.
Согласно документу, теперь в порошкообразном продукте официально допускается наличие небольших комков. Для гранулированного кофе увеличено допустимое время растворения: при наличии спекшихся фрагментов напиток может готовиться до 2,5 минут, хотя ранее норма составляла всего 30 секунд.
Одним из самых резонансных изменений стала отмена фиксированного перечня ингредиентов для кофейного сырья. Теперь производители могут использовать различные пищевые компоненты в составе своей продукции без строгой привязки к прежним спискам.
А вы предпочитаете растворимый кофе или выбираете зерновой?
👍🏻 — Пью только свежесваренный!
⚡️ — Растворимый быстрее и удобнее.
❗Подписаться | Реклама |📲Наш канал в MAX
💸Hewlett-Packardвыиграла тендер на $2 млрд от Агентства национальной безопасности США для разработки систем видеонаблюдения с использованием искусственного интеллекта.
Контракт рассчитан на десять лет и предназначен для удовлетворения «растущих потребностей ведомства в управлении данными».
☝️ Новая система будет принимать и обрабатывать большие объемы информации, а также поддерживать возможности глубокого обучения и искусственного интеллекта.
#HP#отслеживание
#активности#HP
Фармим поинты от перспективного блокчейна, устойчивого к сибилам.
Humanity Protocol - блокчейн, устойчивый к атакам мультиаккеров, благодаря использованию Proof of Humanity (PoH).
Привлёк проект более $50м от Pantera Capital(lead), Jump Crypto(lead), Animoca, Shima, Hashed, Sandeep Naiwal, Mechanism, Blockchain.com, Foresight и др. На двух последних раундах оценка проекта была больше $1B.
Сейчас у проекта проходит тестнет, в котором мы можем собирать поинты RWT. Эти поинты команда обещает конвертировать в токены HP на листинге.
Что делать?
- переходим по ссылке, ждём в очереди и регистрируемся;
- придумываем Human ID и вводим реф. код ramadancrypton;
- заполняем личные данные и подтверждаем почту(лучше заполнять реальные данные, тк проект открыто борется с сибилами и ботами);
- подключаем все соц. сети(чем больше, тем лучше);
- ежедневно клеймим поинты RWT по кнопке "Daily check-in";
- берём тестовые tHP в кране и бриджим в сеть Sepolia и наоборот;
- приглашаем друзей;
- проявляем активность в дискорд и забираем там роли;
Так как сеть тестовая, бывают частые баги и ошибки, обновляйте страницу, ждите и пробуйте ещё раз.
Судя по слухам, проект может выйти уже в этом квартале, поэтому лучше не откладывать.