Установить свойства виджета в 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
⌨Разработчики Duet Night Abyss анонсировали... клавиатуру
😍 Прошла трансляция разработчиков Duet Night Abyss, на которой они рассказали о нововведениях и анонсировали новые скины. В том числе, скин на оружие в виде клавиатуры.
😍 Новая версия игры выйдет 7 апреля.
😍 Промокоды с трансляции:
• THEGRANDINCENSERITE
• THEFIRMAMENTUNBOUND
• WILLBENEATHTHEWINGS
💬 Вместо решения проблем добавили пароль для блокировки предметов...
🤨 Не знаю даже, как это комментировать.
[Тег: #DNA]
😍 Больше в iNFO Daily
😍Duet Night Abyss снова взломали
😍 Помимо недавнего взлома серверов, хакеры воспользовались технической уязвимостью и внедрили в официальный клиент игры вредоносное ПО, похитившее личные данные игроков. Ходят слухи, что злоумышленники смогли взломать аккаунты в соцсетях (обойдя двухфакторную аутентификацию) и получить доступ к веб-камерам.
😍 Разработчики сообщили лишь о «проблемах со входом» и, внимание, выдали компенсацию в размере 100 валюты.
Для меня это уже не шутки. Это просто провал...
😰 У игры нет защиты и страдают реальные люди. Их аккаунты и данные под угрозой. Это просто ужасно.
[Тег: #DNA]
😍 Больше в iNFO Daily
❓Сервера Duet Night Abyss взломали?
😍 Сегодня пользователи keitaro_gg и sedum нашли способ менять получаемую валюту в промокодах на сотни тысяч, а по слухам — миллионы. Разработчики пока не могут отследить все изменения и исправить ситуацию.
Параллельно появляются новые промокоды с аномально высокими наградами. Делиться ими не собираюсь. Я не поддерживаю подобное.
Также ходят слухи, что у игры слабая защита. Данные о будущих обновлениях якобы уже в руках третьих лиц и постоянно сливаются.
💬 Репутация у игры и так печальная, а эта ситуация её окончательно добивает... Честно, я просто в шоке.
[Тег: #DNA]
😍 Больше в iNFO Daily
🧬 Новые днк-соответствия и список дальних родственников за эти выходные. А также персональные детали из области популяционной генетики, уточнения по здоровью, предрасположенность к синдромам и болезням, и куча другой информации.
А вы интересовались своим геномом? Может быть своим прошлым, молекулярной генеалогией или днк-тестами по медицине?
#dna#днк
#dna meme of the day
(Asking chatgpt how aryan a person is rather than using tools like g25 and qpAdm with appropriate modeling)
#мемдняДНК
(Спрашивать в чате, насколько "ариец" человек, вместо использования инструментов, таких как g25 и qpAdm, с соответствующим моделированием)
@illyrianometer
🌎 The quagga was a unique subspecies of the plains zebra, native to South Africa, with striped forequarters fading to brown at the back. Its sudden extinction in the late 19th century puzzled scientists for years, but recent DNA studies confirmed it was closely related to modern zebras, not a distinct species as once believed. ✨
#quagga⚡#extinction⚡#DNA
👉subscribe Interesting Planet
👉more Channels