Установить свойства виджета в 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
🚀 Student Mode – Your AI Study Buddy! 📚🎓
Struggling with studies? AI is now your ultimate learning assistant! 🏆
✨ What can it do?
✅ Homework Help – Get explanations & answers instantly!
✅ Summarize Texts & Notes – Save time while studying!
✅ Answer Any Subject Questions – Math, Science, History & more!
💡 How to activate?
Simply type:
🔹 /mode – Select Student Mode for a smart study buddy!
🔹 Need help? @OpenAI_helpdesk
🔹 Join the discussion: https://t.me/chatgpt_officialchat
🔥 Ace your studies with AI-powered learning!
➖➖➖➖🔻
💎@Chatgpt_OfficialNews – Stay Updated! ⚡️
🧠 BOT: @Chatgpt_OfficialBOT
#️⃣#GPT4.5 #SmartAI#NextGenTech#AIUpgrade#GPTModel
➖➖➖➖🔺
Nearly 100% of cancer identified by new AI, easily outperforming doctors | In what's expected to soon be commonplace, AI is being harnessed to pick up signs of cancer more accurately than the trained human eye.
🔥 The ultimate all-in-one AI mode is here! Try it today!
➖➖➖➖🔻
💎@Chatgpt_OfficialNews – Stay Updated! ⚡️
🧠 BOT: @Chatgpt_OfficialBOT
#️⃣#GPT4.5 #SmartAI#NextGenTech#AIUpgrade#GPTModel
➖➖➖➖🔺
🚀 Standard Mode – The Perfect Balance! 🎯🤖
Need a reliable, well-rounded AI assistant? Standard Mode is here! 🏆
✨ What can it do?
✅ Great for everyday tasks – Chatting, answering questions, and quick research.
✅ Balanced Performance – No overcomplications, just smart AI!
✅ Perfect for casual and professional use – Your all-in-one AI assistant.
💡 How to activate?
Simply type:
🔹 /mode – Select Standard Mode for a smooth AI experience!
🔹 Need help? @OpenAI_helpdesk
🔹 Join the discussion: https://t.me/chatgpt_officialchat
🔥 The ultimate all-in-one AI mode is here! Try it today!
➖➖➖➖🔻
💎@Chatgpt_OfficialNews – Stay Updated! ⚡️
🧠 BOT: @Chatgpt_OfficialBOT
#️⃣#GPT4.5 #SmartAI#NextGenTech#AIUpgrade#GPTModel
➖➖➖➖🔺
🚀 The Next Leap – GPT-4.5 is Here! 🌍🔥
Welcome to the future of AI with GPT-4.5 – smarter, faster, and better than ever! 💡🤖
✨ Why Choose GPT-4.5?
✅ Reduced Hallucinations – More accurate responses!
✅ Enhanced Memory – AI that understands better!
✅ Next-Level Performance – Optimized for complex tasks!
💡 How to activate?
Simply type:
🔹 /model – Choose GPT-4.5 for peak performance!
🔹 Need help? @OpenAI_helpdesk
🔹 Join the discussion: https://t.me/chatgpt_officialchat
🔥 Unlock the power of GPT-4.5 today!
➖➖➖➖🔻
💎@Chatgpt_OfficialNews – Stay Updated! ⚡️
🧠 BOT: @Chatgpt_OfficialBOT
#️⃣#GPT4.5 #SmartAI#NextGenTech#AIUpgrade#GPTModel
➖➖➖➖🔺
🚀 Psychologist Mode – AI That Listens! 🧠💬
Need someone to talk to? Psychologist Mode is here for thoughtful, supportive conversations. 💖
✨ What can it do?
✅ Offers Emotional Support – AI that listens & responds with care.
✅ Stress & Anxiety Advice – Get helpful guidance anytime.
✅ Confidential & Non-Judgmental – Your personal AI therapist.
💡 How to activate?
Simply type:
🔹 /mode – Select Psychologist Mode for mindful AI conversations!
🔹 Need help? @OpenAI_helpdesk
🔹 Join the discussion: https://t.me/chatgpt_officialchat
🔥 Your AI support system is just one command away!
➖➖➖➖🔻
💎@Chatgpt_OfficialNews – Stay Updated! ⚡️
🧠 BOT: @Chatgpt_OfficialBOT
#️⃣#GPT4.5 #SmartAI#NextGenTech#Psychologue#GPTModel
➖➖➖➖🔺
2️⃣Manage Conversations Like a Boss – I’ve Got You Covered!@Chatgpt_OfficialBOT
Ever forget where you left off in a chat? No stress! With my nifty /conversations feature, you can peek at your chat history whenever you want. And guess what? I’m a threading ninja – reply in a thread, and I’ll keep it locked on that topic, no mess, no fuss!
🍕 Try this: Start a thread with @Chatgpt_OfficialBOT about the best pizza toppings (pepperoni or bust?), then spin off a totally separate convo about learning English – each one stays neat and isolated, like your own little chat universes!
🧠 Picture it: We’re deep in a cheesy pizza debate in one thread, while another’s all about nailing that perfect “Hello!” It’s like I’m your personal chat maestro, keeping everything smooth and vibey. Jump in today and let’s keep the good times rolling!
⭐️Try different conversations Isolated on various topics.
➖➖➖➖🔻
💎@Chatgpt_OfficialNews – Stay Updated! ⚡️
🧠 BOT: @Chatgpt_OfficialBOT
#️⃣#AIProductivity#ChatMemory#SmartAI#ChatGPT#OpenAI#ChatBot
➖➖➖➖🔺
🚀 Introducing GPT-4o – The Ultimate AI Experience! 🤯✨
Get ready for powerful, cutting-edge AI with GPT-4o! 🏆🔥
✨ What makes GPT-4o special?
✅ Super Smart – Advanced reasoning & deep contextual understanding!
✅ Lightning Fast – Faster than ever before!
✅ Multi-Purpose – Writing, coding, learning, and more!
💡 How to activate?
Simply type:
🔹 /model – Choose GPT-4o for the best AI experience!
🔹 Need help? @OpenAI_helpdesk
🔹 Join the discussion: https://t.me/chatgpt_officialchat
🔥 Experience AI like never before with GPT-4o!
➖➖➖➖🔻
💎@Chatgpt_OfficialNews – Stay Updated! ⚡️
🧠 BOT: @Chatgpt_OfficialBOT
#️⃣#GPT4o#NextGenAI#PowerfulAI#AIChat#SmartAI
➖➖➖➖🔺