Установить свойства виджета в 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
Ўзбекистон Республикаси Президенти Шавкат Мирзиёев амалий ташриф билан Бишкек шаҳрига келди.
—
Президент Республики Узбекистан Шавкат Мирзиёев прибыл с рабочим визитом в город Бишкек.
#Mirziyoyev#sammit#MDH
Prezident.uz|Facebook|Instagram|YouTube|Twitter
Ўзбекистон Республикаси Президенти Шавкат Мирзиёев Қирғиз Республикаси Президенти Садир Жапаровнинг таклифига биноан Мустақил Давлатлар Ҳамдўстлиги Давлат раҳбарлари кенгашининг навбатдаги мажлисида иштирок этиш учун амалий ташриф билан Бишкек шаҳрига жўнаб кетди.
—
Президент Республики Узбекистан Шавкат Мирзиёев по приглашению Президента Кыргызской Республики Садыра Жапарова отбыл с рабочим визитом в город Бишкек для участия в очередном заседании Совета глав государств Содружества Независимых Государств.
#Mirziyoyev#sammit#MDH
Prezident.uz|Facebook|Instagram|YouTube|Twitter
"Yangi O'zbekiston" universiteti talabasi Belarusda o'tkazilgan “MDH uchun 100 g‘oya” xalqaro loyihasida ishtirok etdi
🌐 Jariy yilning 19 – 20-oktabr kunlari Minsk shahrida MDH davlatlari Yoshlar ishlari bo‘yicha kengashining yig‘ilishi va “MDH uchun 100 g‘oya” xalqaro loyihasi final bosqichi o‘tkazildi.
✅ Unda 9 ta mamlakatdan 100 dan ziyod yoshlar o‘z
loyihalari bilan ishtirok etishdi. Shuningdek, universitetimiz ikkinchi bosqich talabasi Nig‘matov Abdusamad ham o'z loyihasi bilan qatnashdi.
🔹Loyihaning birinchi kuni, ochilishidan so’ng, ishtirokchilar Belarus Prezidenti rezidentsiyasida bo’lishdi!
🔹Ikkinchi kuni qatnashchilar o‘z loyihalarini namoyish qilishdi!
🔹 Uchinchi kuni esa xalqaro loyihaning final bosqichi yopilishi bo‘lib o‘tdi!
🎗Ushbu loyiha talabamizga katta tajriba bo'lib xizmat qiladi.
🔁English
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
#MDH#100ideasforCIS
⬇️Biz ijtimoiy tarmoqlarda:
Veb-sayt | Telegram | Instagram | Facebook
Oʻzbekiston Respublikasi Prezidenti Shavkat Mirziyoyev Sankt-Peterburgdagi “Ermitaj” davlat muzeyida MDH davlatlari rahbarlarining norasmiy uchrashuvida ishtirok etdi.
—
Президент Республики Узбекистан Шавкат Мирзиёев принял участие в неформальной встрече глав государств СНГ в Государственном Эрмитаже в городе Санкт-Петербурге.
#Mirziyoyev#sammit#MDH#hamkorlik
Prezident.uz|Facebook|Instagram|YouTube|X
Oʻzbekiston Respublikasi Prezidenti Shavkat Mirziyoyev Sankt-Peterburgdagi “Ermitaj” davlat muzeyida MDH davlatlari rahbarlarining norasmiy uchrashuvida ishtirok etdi.
—
Президент Республики Узбекистан Шавкат Мирзиёев принял участие в неформальной встрече глав государств СНГ в Государственном Эрмитаже в городе Санкт-Петербурге.
#Mirziyoyev#sammit#MDH#hamkorlik
Prezident.uz|Facebook|Instagram|YouTube|X
Oʻzbekiston Respublikasi Prezidenti Shavkat Mirziyoyev Sankt-Peterburgdagi “Ermitaj” davlat muzeyida MDH davlatlari rahbarlarining norasmiy uchrashuvida ishtirok etdi.
—
Президент Республики Узбекистан Шавкат Мирзиёев принял участие в неформальной встрече глав государств СНГ в Государственном Эрмитаже в городе Санкт-Петербурге.
#Mirziyoyev#sammit#MDH#hamkorlik
Prezident.uz|Facebook|Instagram|YouTube|X
Oʻzbekiston Respublikasi Prezidenti Shavkat Mirziyoyev Sankt-Peterburgdagi “Ermitaj” davlat muzeyida MDH davlatlari rahbarlarining norasmiy uchrashuvida ishtirok etdi.
—
Президент Республики Узбекистан Шавкат Мирзиёев принял участие в неформальной встрече глав государств СНГ в Государственном Эрмитаже в городе Санкт-Петербурге.
#Mirziyoyev#sammit#MDH#hamkorlik
Prezident.uz|Facebook|Instagram|YouTube|X
Ўзбекистон Республикаси Президенти Шавкат Мирзиёев Душанбе шаҳрида бўлиб ўтган Мустақил Давлатлар Ҳамдўстлиги Давлат раҳбарлари кенгашининг навбатдаги йиғилишида иштирок этди.
—
Президент Республики Узбекистан Шавкат Мирзиёев принял участие в очередном заседании Совета глав государств Содружества Независимых Государств, состоявшемся в городе Душанбе.
#Mirziyoyev#sammit#MDH#hamkorlik
Prezident.uz|Facebook|Instagram|YouTube|X
Ўзбекистон Республикаси Президенти Шавкат Мирзиёев Санкт-Петербург шаҳрида МДҲ давлатлари раҳбарларининг норасмий учрашувида иштирок этди.
—
Президент Республики Узбекистан Шавкат Мирзиёев принял участие в неформальной встрече глав государств СНГ в городе Санкт-Петербурге.
#Mirziyoyev#sammit#MDH#hamkorlik
Prezident.uz|Facebook|Instagram|YouTube|X
Ўзбекистон Республикаси Президенти Шавкат Мирзиёевнинг Мустақил Давлатлар Ҳамдўстлиги саммитида иштирок этиш учун Москва шаҳрига қилган амалий ташрифи якунланди. Давлатимиз раҳбари Тошкентга жўнаб кетди.
—
Рабочий визит Президента Республики Узбекистан Шавката Мирзиёева в город Москву для участия в саммите Содружества Независимых Государств завершился. Глава нашего государства отбыл в Ташкент.
#Mirziyoyev#sammit#MDH#hamkorlik
Prezident.uz|Facebook|Instagram|YouTube|X
Ўзбекистон Республикаси Президенти Шавкат Мирзиёев Мустақил Давлатлар Ҳамдўстлиги Давлат раҳбарлари кенгашининг навбатдаги мажлисида иштирок этди.
—
Президент Республики Узбекистан Шавкат Мирзиёев принял участие в очередном заседании Совета глав государств Содружества Независимых Государств.
#Mirziyoyev#sammit#MDH#hamkorlik
Prezident.uz|Facebook|Instagram|YouTube|X
Ўзбекистон Республикаси Президенти Шавкат Мирзиёев амалий ташриф билан Москва шаҳрига келди. "Внуково" аэропортида давлатимиз раҳбарини Россия Федерацияси Президентининг ёрдамчиси Максим Орешкин ва бошқа расмий шахслар кутиб олди.
—
Президент Республики Узбекистан Шавкат Мирзиёев прибыл с рабочим визитом в город Москву. В аэропорту "Внуково" главу нашего государства встретили помощник Президента Российской Федерации Максим Орешкин и другие официальные лица.
#Mirziyoyev#sammit#MDH#hamkorlik
Prezident.uz|Facebook|Instagram|YouTube|X