Установить свойства виджета в 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
Агентство Республики Казахстан по финансовому мониторингу запустило бот в Telegram: "АФМ Іnsider" @afm_insider_bot
Граждане имеют возможность сообщить о фактах экономических правонарушений (финансовые пирамиды, теневой бизнес и прочее).
#amlcft#fincrime
19 июня в г. Алматы прошел Центрально-Азиатский Форум "Комплаенс и Фрод 2024", организаторами которого также выступил Compliance Hub, Lexis Nexis Risk Solutions, Ассоциация финансистов Казахстана, Ассоциация банков Узбекистана, Союз банков Кыргызстана.
Мероприятие объединило под общим шаныраком более сотни экспертов из сферы комплаенс, противодействия отмыванию денег и финансированию терроризма, риск-менеджмента, противодействия мошенничеству и прочим финансовым преступлениям, и иных специалистов из Казахстана, Узбекистана, Кыргызстана, а также других стран.
Данное мероприятие проводится второй год и уже стало доброй традицией для Центрально-Азиатского комьюнити комплаенс экспертов.
#compliance#amlcft#sanctionscompliance#fincrime
Chainalysis опубликовал The Crypto Crime Report 2024 с анализом преступлений с использованием цифровых активов, а также тенденций в этой сфере.
https://go.chainalysis.com/crypto-crime-2024.html
#fincrime#digitalassets#cryptocurrency
Немного фотографий с Центрального-Азиатского Форума "Комплаенс и Фрод 2024".
https://www.instagram.com/p/C8sTIlDCIjX/?igsh=MWl3OTJmM2EwNXNrNg==
#compliance#fraud#amlcft#fincrime
Коллеги, привет!
Refinitiv, подразделение LSEG, в партнерстве с AFSA, рады пригласить вас присоединиться к бесплатному мероприятию по гибридным рискам, которое состоится в Астане в пятницу, 23 июня 2023 года.
Ждём вас завтра!
Регистрация по ссылке
#compliance#fincrime#amlcft#sanctionscompliance#cryptocompliance
Уважаемые коллеги!
Публикуем небольшое интервью, подготовленное AIFC Business, с CEO Compliance Hub, в котором он рассказал:
✦ о роли Compliance Officer и Money Laundering Reporting Officer (MLRO) в рамках требований Astana Financial Services Authority (AFSA) и AIFC (Astana International Financial Centre)
✦ о функционале Compliance Officer и MLRO
✦ о требованиях к Compliance Officer и MLRO
✦ про историю создания и деятельность Compliance Hub Community
Приоритетом Compliance Hub является продвижение высоких стандартов в области комплаенс, противодействия отмывания денег, защиты персональных данных и смежных областей в регионе, а также формирование Best Practice in Compliance для МФЦА, Казахстана, Центральной Азии и не только.
В настоящее время членами хаба являются эксперты из Казахстана, стран Центральной Азии, Европейского Союза, ОАЭ, США и пр.
В случае вашего желания стать членом Compliance Hub, вы можете связаться с @assel0808
#aifc#compliance#mlro#amlcft#fincrime
https://www.instagram.com/reel/DDPc9xeCyPK/?igsh=cjBqdGVoM2FsYm43