Установить свойства виджета в 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
News: #Southwest State president resigns after federal forces seize #Baidoa
Somalia’s Southwest State President, Abdiaziz Hassan Mohamed Laftagareen announced his resignation on Monday, hours after federal troops and allied armed groups entered Baidoa following clashes that left at least two people dead and 25 others wounded.
In a brief statement posted on his official Facebook page, Laftagareen said the resignation was effective immediately, without providing further details.
His whereabouts remain unclear.
Earlier in the day, forces of the Somali National Armed Forces, backed by allied militias, moved into Baidoa and reportedly took control of key installations, including the police station and major business centers, encountering limited resistance.
Regional forces loyal to Laftagareen were said to have withdrawn from parts of the city.
According to local reports, strategic sites including the airport and the.......
https://x.com/addisstandard/status/2038849050108416203?s=20
#Somalian President Mohamud unharmed in mortar attack
Somalian President Hassan Sheikh Mohamud was unharmed after he and his entourage were subjected to a barrage of mortar shells in the southern city of #Baidoa on Friday.
The shells were fired shortly after the president alighted from his plane and began greeting army units, police and government officials said.
https://www.bloomberg.com/news/articles/2026-04-04/somalian-president-mohamud-unharmed-in-mortar-attack
#Somali forces reopen key Mogadishu–Baidoa route as defense minister signals intensified offensive
Minister of Defense of the Federal Government of Somalia, Ahmed Moalim Fiqi, has announced that government forces have fully secured the strategic road linking #Mogadishu and #Baidoa, a major breakthrough in ongoing military operations.
In an interview with national television, the Minister said the Somali National Army successfully cleared and reopened the route earlier this week after swiftly dislodging militant fighters from key positions.
“The road is now safe for civilian movement, restoring vital connectivity between the capital and the Bay region”, He said.
He stated that the armed forces have regained strong operational capacity and are now able to conduct precise offensives in remaining militant-held areas. Recent operations include preemptive strikes and a surprise attack on....
https://www.facebook.com/AddisstandardEng/posts/pfbid02MvxWBnGmjHxoqi12Tii5cZDWqSXj1gLp14Nf3vXPFcpnhRKdMiLn6ho3nLc3pPNul
News: #Somali Federal forces seize key installations in #Baidoa as political tensions between #Mogadishu, #Southwest_State escalate
Somali National Armed Forces (SNAF), accompanied by allied militias, took control of the town’s police station, major business centers, and key installations after entering Baidoa without major clashes.
Earlier on Monday, President Abdiaziz Hassan Mohamed warned against federal military intervention in the region.
“Any attack on Baidoa or South West State territory will be met with an appropriately severe military response,” he said in a statement posted on his official X account on March 30. “I urge President Hassan Sheikh to use the remainder of his short time in office to not spill Somali blood but help find a solution for a credible election process.”
https://addisstandard.com/?p=56188
Federal government suspends #Mogadishu–#Baidoa flights after Southwest halts cooperation
#Somalia’s federal government on Tuesday suspended civilian flights between Mogadishu and Baidoa, in a move widely seen as increasing pressure on #Southwest State authorities amid a deepening political standoff.
Local sources said that as of Tuesday morning, commercial passenger aircrafts were unable to land in Baidoa following the decision. Only #United_Nations and cargo flights were being permitted to operate during the suspension.
Officials in Southwest State condemned the measure.
“The Somali government has stopped passenger planes from arriving in Baidoa. People entered the airport at 6:00 this morning, and they have not been allowed to departure yet,” said Ilyas Ali Nur, a senior official in the regional administration.
Sources indicated that flight clearances had been.....
https://www.hiiraan.com/news4/2026/Mar/204688/federal_government_suspends_mogadishubaidoa_flights_after_southwest_halts_cooperation.aspx