Установить свойства виджета в 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
🌷🌼🌹Lotte начинает движение в сторону весны
Волшебный автобус, увитый цветами, припарковался около центрального универмага 🇰🇷Lotte Shopping где-то в виртуальной вселенной.
Работа digital-художницы Ноэль ван Дайк (@noellevandijk) к сезонной рекламной кампании 𝐖𝐨𝐧𝐝𝐞𝐫 𝐃𝐫𝐞𝐚𝐦𝐬 с использованием генеративного искусственного интеллекта сочетает реалистичные и виртуальные графические элементы, чтобы образно передать фантастическую красоту весны.
Источник @lotteshopping
#lotte#seasonal#реклама
Привеееет привет, дорогие!! 🤗
Ох, как долго я не выкладывала новые посты, но за это время я приготовила несколько вкусных корейских блюд, засняла их и скоро выложу для Вас рецепты))
А сегодня я хочу рассказать Вам о Lotte World Tower ☝🏼
Будучи современным символом Сеула, Lotte World Tower интересно переплетается с корейской кухней и культурой, хоть и не так очевидно, как исторические достопримечательности. Башня настолько высокая, что ее хорошо видно с разных уголков Сеула ☝🏼
Расскажу несколько интересных фактов.
Гастрономический рай: Внутри Lotte World Tower расположено множество ресторанов, представляющих как традиционную корейскую кухню, так и современные гастрономические тренды. От изысканного ханджонсик (традиционный корейский обед из множества блюд) до уличной еды, башня предлагает посетителям полное погружение в кулинарное разнообразие Кореи.
Культурные мероприятия и выставки:
В Lotte World Tower часто проводятся различные культурные мероприятия, выставки и фестивали, посвященные корейским традициям, искусству и истории.
Архитектура и дизайн с корейскими мотивами:
Хотя дизайн башни в целом современный, в нем можно найти и отсылки к корейской культуре. Например, форма башни - вдохновленная керамикой и каллиграфией.
Шопинг - часть корейской культуры:
Вы знали, что Юж. корейцы жуткие шопоголики?)) 🛒🛍️🧾
Lotte World Mall, примыкающий к башне, является одним из крупнейших торговых центров в Корее и предлагает огромный выбор товаров, включая продукцию корейских дизайнеров и брендов.
Место встречи и общения: Lotte World Tower стала популярным местом встреч и общения как для местных жителей, так и для туристов.
Хотя Lotte World Tower – это ультрасовременное здание, оно старается гармонично вписываться в культурный контекст Кореи, предлагая посетителям уникальную возможность познакомиться с разными гранями этой страны.
Если Вы ещё не были в Корее, обязательно посетите эту страну утренней свежести 🇰🇷
#Korea#seoul#lotte_world_tower#lotte#kim_chi_kim
Roam Team Joins Coinbase, Shutting Down
Roam, a blockchain search engine, will shut down its products to join Coinbase. Key executives, including CEO, CTO, and CPO, are also moving to Coinbase to boost its on-chain consumer division. Read more
📊 Notable Transactions:
- 89,114,400 #XLM (valued at $38.6M) transferred between unknown wallets. Details
📈 Bithumb adds Korean Won trading pairs for DEEP token on Sui network. Details
🎮 Lotte Group gets largest grant from Arbitrum for its metaverse gaming platform Caliverse. Amount undisclosed. Read more
🌍 BIT Mining seals $14M deal with Ethiopia for a 51-MW facility and 18,000 mining machines, capitalizing on the country's low energy costs. Read more
#Blockchain#Coinbase#XLM#Crypto#DEEP#Sui#Arbitrum#Lotte#Metaverse#BITMining#Ethiopia#Bitcoin#DEX#CLOB#Gaming#Hydropower#Finance#News#Update#VC