Установить свойства виджета в 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 XXIV ALBA-TCP Summit, held in Caracas, marked 20 years since the bloc's founding. The alliance welcomed Palestine as an honorary member with "brotherly country" status, condemned Israel's “terrible crimes against humanity,” and pledged to hold a future summit in Palestine.
The final communiqué also called for Cuba’s removal from the US list of state sponsors of terrorism and demanded an end to the economic blockade against the island. Leaders reaffirmed their commitment to Latin American and Caribbean integration, peace, and sovereignty.
Read the full report here 👉🏼https://venezuelanalysis.com/news/alba-bloc-defends-peace-sovereignty-and-palestine-at-xxiv-summit/
#ALBA#InternationalSolidarity#RegionalIntegration
📰 NEWS | Latin American Leaders Preach Unity Against Trade Wars and Mass Deportations at CELAC Summit
At the IX CELAC Summit in Honduras, Latin American and Caribbean leaders condemned US-led sanctions, trade wars, and anti-migrant policies. Venezuela's Maduro urged the bloc to “reinvent itself” and adopt a general secretariat.
Leaders also rejected the Trump administration’s use of the Alien Enemies Act to deport Venezuelans, with reports confirming that most of the 2,500+ deported migrants have no criminal record. Some were even held in Guantánamo Bay before being returned.
🔗 Read our report here: https://venezuelanalysis.com/news/latin-american-leaders-preach-unity-against-trade-wars-and-mass-deportations-at-celac-summit/
#CELAC#Migration#RegionalIntegration
📰 NEWS | CELAC-EU Summit Urges Peace as Venezuela’s Maduro Warns of Caribbean ‘War Threats’
The CELAC-EU gathering in Santa Marta, Colombia, emphasized the two blocs' commitment to peace, cooperation and multilateralism. A final communiqué rejected "threats and use of force" amidst a US military buildup in the Caribbean.
Venezuelan President Nicolás Maduro addressed the summit, calling for a regional response to preserve the region's sovereignty and self-determination.
Read the full report here 👉https://venezuelanalysis.com/news/celac-eu-summit-urges-peace-as-venezuelas-maduro-warns-of-caribbean-war-threats/
#USMilitaryThreats#CELAC#RegionalIntegration#InternationalSolidarity
@RusEmbMalta Press release:
🇷🇺🇦🇲🇰🇿🇰🇬🇧🇾EAEU Turns 10: A Decade of Integration and Growth
On May 29, 2014, the Treaty on the Establishment of the Eurasian Economic Union (EAEU) was signed – marking the beginning of a new era of economic integration across Eurasia.
Over the past decade, the Union’s five member states – Russia, Armenia, Kazakhstan, Kyrgyzstan, and Belarus – have achieved remarkable results:
📈 In 2024, mutual trade within the EAEU reached nearly $100 billion
💱 Over 90% of settlements were made in national currencies
🌐 International cooperation is expanding rapidly
🔄 The internal market is functioning and evolving steadily
🤝 The EAEU demonstrates resilience amid global turbulence, offering a stable and non-discriminatory framework built on equality, mutual respect, and benefit.
Today, the EAEU is a growing center of gravity in international economic relations:
🌍 Four observer states – Uzbekistan, Cuba, Iran and Moldova
🤝 Free trade agreements with Vietnam, Iran, and Serbia
🤝 Non-preferential trade agreement with China
📜 Over 80 cooperation MoUs through the Eurasian Economic Commission
🪙Trade talks are underway with Indonesia, the UAE, Egypt, India, Mongolia, and others
🇱🇧 We welcome potential interest from our Lebanese friends in partnering with the Union.
Russia remains a consistent supporter of deeper coordination between the EAEU and other regional structures – including the CIS, ASEAN, and SCO – as part of building a Greater Eurasian Partnership, an idea first proposed by President Vladimir Putin in 2015.
🔗 The EAEU today stands as a model of successful integration – based on trust, equality, and shared benefit. We thank our partners and the Eurasian Economic Commission for their continued cooperation, and we look forward to unlocking even greater potential together – for the benefit of our peoples and businesses.
#EAEU#EurasianUnion#Eurasia#EconomicCooperation#Russia#Armenia#Kazakhstan#Kyrgyzstan#Belarus#Trade#EAEUDay2025#RegionalIntegration