Установить свойства виджета в 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
🏆 2026 ASIA STAR ENTERTAINER AWARDS
ASEA Fan Choice Singer 🎤
🗓️ Ends: 17 May 2026
📱 My1Pick App
Link : Voting Link
fsn-app.my1pick.com/app/link/theme…
📱 Podoal App
Link : Voting Link
global.podoal.io/app/fandings/5…
📱 Mubeat App
Link : Voting Link
mubeat.applink.info/9hFE0waZsG
📍Check Comment Box for Tutorial
🤍💫 | #voting
@foreverbulletproof7
🏆 MUSIC AWARDS JAPAN
Best of Listeners’: International Song by Spotify
📣 Vote for DSYLM in Music Awards Japan Best of Listeners’ Choice!! 🏃♀️🫷
🗳️ 2 vts for Premium | 1 vt for Non-Premium
📆 Final voting ends on May 20
Link : open.spotify.com/playlist/37i9d…
📍Check Comment Box for Tutorial
🤍💫 | #voting
@foreverbulletproof7
🏆 SEOUL MUSIC AWARD 2026
BTS are nominated in 3 categories:
🏆 Korea Wave Award:
Link : promo-web.idolchamp.com/app_proxy.html…
🏆 Popularity Award:
Link : promo-web.idolchamp.com/app_proxy.html…
🏆 K-pop World Choice - Group:
Link : promo-web.idolchamp.com/app_proxy.html…
📝 Criteria: 100% voting
⏰ Ends May 28, 2026 23:59 (KST) on Idol Champ
📍Check Comment Box for Tutorial
🤍💫 | #voting
@foreverbulletproof7
🏆 Seoul Music Awards
🛑 Focus your votes on Korea Wave Award category!
⇢ Korea Wave Award - #1 BTS 57.85%
App: Idol Champ
Period: 05.08~05.28
Result: sum of all rounds
🤍💫 | #voting
@foreverbulletproof7
[🏆 2026 ASIA STAR ENTERTAINMENT AWARDS]
🛑 5 DAYS LEFT for Fan Choice Singer Final Voting
👉🏻 Status 🚨
▶️ Mubeat #4
▶️ Podoal #7 🔺
▶️ My1Pick #6 🔺
▶️ 100% Voting
▶️ until 5/17
🤍💫 | #voting
@foreverbulletproof7
Everyone please vote for BTS for Forbes Popularity on Mnet plus.
Voting is super easy, We do not have much time.
🔻 : https://play.google.com/store/apps/dev?id=4990449589140386036
🤍💫 | #voting
@foreverbulletproof7
The winners of AMAs will be announced at the AMAs Award Show 💜
⏰ DATE | TIME:
🇺🇸 May 25 at 8PM ET
🇺🇸 May 26 at 9AM KST
🤍💫 | #voting
@foreverbulletproof7
VOTE FOR BTS FOR FORBES POWER 40 CELEBRITY 2026
We’re falling behind fast 🔴 and the gap won’t close on its own
Start collecting MplePoints and cast your votes for BTS! 🌊🏄♂️
LINK : mnetplus.onelink.me/TRa8/xohkwx0b?…
🤍💫 | #voting
______
@foreverbulletproof7
______
BTS has been nominated for the ‘Power Celebrity 40’ list by Forbes Korea.
🏆 Prizes:
• Trophy
• Online PR
• Feature in Forbes Korea Magazine
📲 Vote via Mnet Plus App
Vote here: mnetplus.onelink.me/TRa8/xohkwx0b?…
Ends: May 10, 11:59PM KST
🤍💫 | #voting
@foreverbulletproof7
⚖️🗳️SUPREME COURT CASE COULD RESHAPE VOTING RIGHTS ACT
🔹 Louisiana v Callais challenges constitutionality of Section 2 of Voting Rights Act 📋
🔹 Case targets law prohibiting electoral discrimination based on race nationwide ⚡
🔹 Ruling against could eliminate or dilute Black and Hispanic-majority districts 💀
🔹 Up to nineteen Democratic-held seats primarily in the South at risk 🚨
🔹 Florida, Kentucky, Virginia pursuing mid-decade redistricting before midterms 🗺️
🔹 Governor DeSantis calls special legislative session for April redistricting 🏛️
Major implications for November midterms and minority representation 🔥📊
#USNews#voting
Trending Apps: Enhance Voting with Your Feedback
#Voting#Apps
Trending Apps introduces a new Voting feature and seeks user feedback to improve it. Users can report bugs, suggest improvements, or share ideas to help refine the Apps Center.
Source: link
@tonlines