Установить свойства виджета в 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
Ukraine Considers Raising Retirement Age to 67
Facing a demographic crisis and labor shortages, Ukraine is considering raising the retirement age to 67. Currently, about 10.5 million pensioners equal the number of working-age citizens, straining the pension system. Experts warn the situation will worsen by 2040 due to an aging population. This discussion comes amid record population decline and restrictions on young Ukrainians leaving the country.
#Ukraine#pension#demographics#crisis
The main news of Russia and the world ishere.
Фармони Президенти Ҷумҳурии Тоҷикистон дар бораи тадбирҳои тақвият бахшидани сатҳи ҳифзи иҷтимоии аҳолӣ, зиёд намудани маоши амалкунандаи вазифавии хизматчиёни давлатӣ, кормандони ташкилотҳои буҷетӣ, андозаи нафақа ва стипендия, №962 аз 8 феврали соли 2025
Президенти Ҷумҳурии Тоҷикистон, Пешвои миллат муҳтарам Эмомалӣ Раҳмон масъалаи баланд бардоштани сатҳу сифати зиндагии аҳолиро яке аз афзалиятҳои аввалиндараҷаи сиёсати иқтисодию иҷтимоии давлат муайян намудаанд.
Дар ин робита, моҳи декабри соли 2024 ҳангоми ироаи Паёми навбатии худ ҷиҳати идома додани ғамхории давлат ба мардуми кишвар, боз ҳам баланд бардоштани сатҳи некуаҳволии сокинон ва тақвият бахшидани ҳифзи иҷтимоии аҳолӣ дастур доданд, ки аз 1 сентябри соли 2025 маоши вазифавии хизматчиёни ҳарбӣ, кормандони мақомоти ҳифзи ҳуқуқ, мақомоти ҳокимият ва идоракунии давлатӣ, муассисаҳои соҳаҳои маориф, илм, фарҳанг, варзиш, тандурустӣ, ҳифзи иҷтимоӣ ва кормандони ташкилотҳои дигари буҷетӣ инчунин стипендия ва нафақа зиёд карда шавад.
Указ Президента Республики Таджикистан о мерах по усилению уровня социальной защиты населения, увеличению действующих должностных окладов государственных служащих, работников бюджетных организаций, размеров пенсий и стипендий, №962 от 8 февраля 2025 года
Президент Республики Таджикистан, Лидер нации уважаемый Эмомали Рахмон определил вопрос повышения уровня и качества жизни населения как один из первостепенных приоритетов экономической и социальной политики государства.
В связи с этим, в декабре 2024 года на своём очередном Послании с целью продолжения заботы государства о народе страны, дальнейшего повышения уровня благосостояния жителей и укрепления социальной защиты населения поручил с 1 сентября 2025 года увеличить должностные оклады военнослужащих, работников правоохранительных органов, органов власти и государственного управления, учреждений сферы образования, науки, культуры, спорта, здравоохранения, социальной защиты и работников других бюджетных организаций, а также стипендии и пенсии.
#ЭмомалӣРаҳмон#ЭмомалиРахмон#EmomaliRahmon#Тоҷикистон#Таджикистан#Tajikistan#Президент#President#Тоҷикон#Таджики#Фармон#Указ#Decree#маош#нафақа#стипендия#зарплата#пенсия#salary#pension#scholarship
President.tj | Facebook | Instagram | Telegram | X | Youtube