Установить свойства виджета в 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
📝 INTERVIEW | Feminism and Revolution: A Conversation with Alejandra Laprea
In the latest VA interview, Alejandra Laprea, a popular feminist and member of the World March of Women, discusses how popular feminism in Venezuela continues to shape the revolution from the ground up. She stresses the importance of unity within the feminist movement, advocating for a collective, consensus-based agenda.
"We are experiencing a moment of setbacks at the global, continental, and national levels. In Venezuela, the feminist movement must come together and build a common agenda – one that is truly collective and based on consensus, rather than a mere compilation of different perspectives." States Alejandra.
🔗 Read the full interview here: https://shorturl.at/ppCss
#Feminism#Sanctions#WomensRights
🗒️🗣️ INTERVIEW | Aimee Zambrano: ‘Let Us Demand a Justice System with a Gender Perspective’
In the latest VA interview, activist and researcher Aimee Zambrano takes stock of gender violence in Venezuela and the necessary state policies to respond.
Through the Utopix Femicide Monitor, a platform that collects cases from open sources, Zambrano and her team have tracked patterns since 2019. However, Zambrano warns that other forms of violence are increasing, particularly attempted femicides, sexual abuse, and cases linked to the disappearance of women and girls.
She also argues that Venezuela needs a justice system with a gender perspective and a coordinated state response involving multiple ministries, including education, housing, and communication, to address gender violence.
Read the full interview here 👉🏾https://shorturl.at/tCbzV
#Feminisms#WomensRights
On 7 November 1800, Paris required women to get police permission to wear pants — keeping them from wearing pants without authorization.
[Read more here]
@googlefactss#pants#womensrights#law#France
🇿🇦"You Strike a Woman, You Strike a Rock"
Today is National Women’s Day in South Africa.
🗓 On August 9, 1956, a protest march was held in Pretoria against the extension of the humiliating Pass Laws to black women — apartheid-era regulations requiring all black South Africans to carry a “dompas” containing their personal details and movement permits.
✊ The march was led by four courageous women: Helen Joseph, Rahima Moosa, Sophie Williams, and Lillian Ngoyi. A monument in central Pretoria now honors their legacy.
📌 The slogan "You strike a woman, you strike a rock" became a powerful emblem of women’s strength and resilience: oppression only solidifies their resolve.
#SouthAfrica#NationalWomensDay#PassLaws#Apartheid#Pretoria#WomensRights#History
Female genital mutilation (FGM) also misleadingly known as "female circumcision" removes and injures parts of the female genitals for non-medical reasons. It is usually performed on girls from infancy to age 15. It has no health benefits and can cause severe pain, heavy bleeding, infection, shock, infertility, childbirth complications, and psychological trauma. Over 230 million women and girls worldwide have undergone FGM.
No religion requires or asks for this practice.
🚫✂️👧🌍⚖🪧
Warning, the link and information about this is not for the faint of heart. Research about this might be disturbing to some people.
[Read more at your own discretion]
[Poll about your opinions]
@googlefactss
#facts#humanrights#health#womensrights#education#globalissues#childabuse
Mojtaba Khamenei became Supreme Leader of Iran after his father, Ali Khamenei, was killed in a U.S.–Israeli airstrike. He leads with hard-line policies, controlling the military, security forces, and political decisions. For ordinary Iranians, this means strict government control, limited political freedom, limited internet, harsh enforcement of laws, and continued tensions with the West. Daily life and dissent will likely remain tightly restricted under his rule.
🕌🇮🇷⚔️
[Read more]
@googlefactss
#Iran#MojtabaKhamenei#SupremeLeader#politics#newsfacts#freeIran#protests#womensrights