Установить свойства виджета в 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
OHCHR Fellowship 2026 in Switzerland 🇨🇭 (Fully Funded)
Apply: https://opportunitiescorners.com/ohchr-minorities-fellowship/
4 Weeks Program in Geneva. Open to all Nationalities.
Fellowship Covers Return Airfare, Accommodation, Living Expenses, and Insurance.
#OpportunitiesCorners#OHCHR#Switzerland
#UN rights office cites ‘widespread repression’ in #Uganda before next week’s presidential election
The U.N. Human Rights Office said Friday that a presidential election in Uganda next week would be “marked by widespread repression and intimidation” against the opposition and others.
Ugandan authorities in the East African country have used lawfare, including military legislation, to restrict the activities of politicians and others before voting on Jan. 15, the Geneva-based Office of the U.N. High Commissioner for Human Rights, or #OHCHR, said in a new report.
“Next week’s elections in Uganda will take place in an environment marked by widespread repression and intimidation against the political opposition, human rights defenders, journalists and those with dissenting views,” OHCHR said.
Ugandan police, the military and others have used live ammunition to disperse peaceful assemblies, & the security forces....
https://apnews.com/article/uganda-election-un-rights-report-1e30ab4e21419dad8cd73567fbc0759c
News: Rights groups warn #Ethiopia ‘on the brink’ of renewed large-scale conflict, call for urgent international action
Twenty international as well as regional human rights and humanitarian organizations have warned that Ethiopia is “on the brink” of renewed large-scale conflict and called on the international community to take urgent action to prevent mass atrocities amid escalating violence across several regions.
In an open letter dated 20 February 2026, the groups said ongoing and unresolved conflicts, entrenched impunity, and rising regional tensions are placing civilians at grave risk.
They cited reports by the Office of the #UN High Commissioner for Human Rights (#OHCHR) of heavy weapons use, drone strikes, and arbitrary detentions, warning that space for de-escalation is rapidly shrinking.
The signatories said there has been little meaningful progress toward durable conflict resolution in #Tigray, #Oromia, and #Amhara despite repeated ....
Read more: https://addisstandard.com/?p=55309
News: #UN reports Over 6,000 killed in #Sudan’s El Fasher in three days as RSF took control
At least 6,000 civilians were killed in just three days during an assault on the #Darfur city of #El_Fasher, according to a new report by the United Nations Office of the High Commissioner for Human Rights (#OHCHR).
The report describes a wave of violence that has shocked human rights monitors, highlighting the scale of atrocities committed by Sudan’s Rapid Support Forces (#RSF) and allied militias.
According to the report, the killings occurred between October 25 and 27, 2025, as RSF fighters and allied paramilitaries overran El Fasher. On October 26, the RSF, along with their allied Arab militias known as Janjaweed, seized control of el-Fasher, the Sudanese army’s last remaining stronghold in Darfur, and launched a violent campaign across the city and its surrounding areas after enduring...
https://web.facebook.com/AddisstandardEng/posts/pfbid02rce3AMAVyevwjuMvSNrMmeUvRvqwS2SpH8NNMxkUz1sAonPfXdtmqpjpUvJpVtRhl