Установить свойства виджета в 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
"The way the United States has dealt with its ally, the #SDF, in #Syria is a wake-up call for all countries that believe they are strategic allies of the United States."
https://x.com/Mr_Salarosh/status/2015329233464447232
N.E #Syria : Field developments indicate that al-Jolani terrorist regime is not adhering to the declared ceasefire, despite the #SDF confirming its commitment to it.
Updates from the #SDF:
📌8:40 PM (Damascus time):
The town of Zarkan has been under heavy artillery shelling by Damascus factions for about half an hour, coinciding with Turkish drones flying over the area. Damage and casualty figures are still being assessed.
📌9:20 PM (Damascus time):
Damascus factions launched an attack using heavy weapons on the village of Tal Baroud, located on the Tal Abyad–Hasakah road, south of Hasakah.
Pres della Rep di #Turchia: "L'accordo tra le #SDF e il governo centrale servirà a garantire più sicurezza in #Siria. Riteniamo che ogni sforzo per liberare la Siria dal terrorismo sia un passo nella giusta direzione".
In #Siria sono ancora in corso gli scontri tra le Forze Democratiche Siriane, #SDF e le bande jihadiste sostenute dalla #Turchia. Riferiscono le SDF: "Uccisi 365 jihadisti, morti 81 nostri militanti, uccisi 47 civili tra cui 2 giornalisti".
Al-Hol Camp: Pro-alJolani media outlets have launched a campaign promoting the narrative that #ISIS detainees in al-Hol camp are "victims."
Since yesterday, pro–alJolani media have been conducting interviews with ISIS detainees in al-Hol camp, highlighting their claimed "suffering" and portraying them as having been wronged by the Syrian Democratic Forces (#SDF).
These interviews reveal that the camp houses men as well, contradicting the commonly promoted claim that it contains only women and children.
This style of coverage raises serious questions and suggests preparations to justify the release of some detainees, while ignoring their responsibility for some of the most brutal terrorist crimes in modern history, crimes rivaled only by those committed by Abu Mohammad al-Jolani himself.
Previously, a member of al-Jolani's government, Nour al-Din al-Baba, admitted that the perpetrators of the June 2025 suicide bombing targeting the Mar Elias Church in Damascus had come from al-Hol camp, exploiting the chaos following the fall of the former regime to escape the camp and reach Damascus. This raises the question: why is al-Jolani’s media now attempting to whitewash their image?
At the end of one circulating video showing al-Jolani's militias smuggling residents out of al-Hol camp, a child is heard asking one of the militants: “Do you have weapons?”, underscoring that this is a dangerous extremist group posing a serious threat to Syrian society and beyond.
Additionally, Saudi channel Al-Hadath aired footage from the camp showing an angry ISIS detainee demanding that the Syrian state hold UNHCR staff accountable.
#MazloumAbdi, comandante generale delle Forze Democratiche Siriane, #SDF; "Da due mesi siamo in contatto diretto con la #Turchia. Posso incontrare di persona il Presidente della Repubblica di Turchia".
#MazloumAbdi, comandante generale delle Forze Democratiche Siriane, #SDF: "Il Presidente della Repubblica deve identificare i responsabili del pogrom in corso contro gli aleviti. Sono coinvolte le formazioni paramilitari sostenute dalla #Turchia".
#Aleppo: Footage reveals the aftermath of shelling by alJolani-led/ #HTS-led regime forces targeting the Sheikh Maqsoud neighborhood in Aleppo.
Several shells also landed in the adjacent Al-Midan neighborhood due to indiscriminate attacks on residential areas.
Local media and the Saudi channel "Al-Hadath" falsely claimed that the shelling was carried out by the #SDF, despite footage clearly showing regime forces themselves using all types of artillery.
It should be emphasized that the SDF has no presence in Aleppo, having withdrawn all heavy weapons and personnel under the March 10 agreement. The only forces remaining in Sheikh Maqsoud and Al-Ashrafiyah are the Asayish units, which serve solely as internal security.
#MazloumAbdi, il comandante delle Forze Democratiche Siriane, #SDF e il Presidente della Repubblica di #Siria hanno trovato un accordo per l'integrazione all'esercito siriano.
#MazloumAbdi, comandante delle #SDF: “In #Siria ci sarà un cambiamento di base, non centralizzato. Tutti i popoli avranno un ruolo. Siamo in contatto diretto con la #Turchia e crediamo che possa contribuire positivamente.”
Oggi #Jolani in #Turchia, prima di partire: "Le Forze Democratiche Siriane, #SDF, accettano di aderire all'esercito ma ci sono dei disaccordi ancora da sistemare".