Установить свойства виджета в 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
#writing
@ieltsstrategies
🖌📕Make the most of your Writing test:
@ieltsstrategies
• analyse each task properly and spend some time making notes
• highlight or underline key words in the tasks to make sure that you focus on what you have to do
• plan your answers
• use paragraphs clearly; put one idea in each paragraph
• do not repeat ideas using different words
• do not copy whole sentences from the question – you will receive no marks for this
• keep to the topic; do not write about unrelated subjects
• manage your time; remember, Task 2 is worth twice as much as Task 1
• spend approximately 20 minutes on Task 1 and approximately 40 minutes on Task 2
• you must write your answers in full; answers written in note form or in bullet points will lose marks
@ieltsstrategies
• pay attention to spelling, grammar and punctuation; you will lose marks for mistakes
• avoid informal language
• do not memorise model answers; examiners are trained to recognise them and your test will be invalid
• spend several minutes re-reading and correcting your answers
@ieltsstrategies
#writing
✅ Writing time
🔰 Task 1 (Pie charts 🧇 )
✌️ 2-qism
🧇 Pie charts yozish uchun bu ajoyib qo'llanma o'z ichiga turli foydali mashq va so'zlarni olgan bo'lib foydali bo'ladi degan umiddaman.
♻️@cambridgeIELTSbooks
#writing
✅ Writing time
🔰 Task 1
☺️Sizlarga qanday qilib Task 1 savolini Paraphrase qilishni va shu asosida introduction yozishni o'rgataman. Agar foydali deb hisoblasangiz,ulashing.
♻️@cambridgeIELTSbooks
#writing
✅ Writing time
🔰 Task 1 (Line graph 📉📈)
✌️2-qism
📈 Line graph yozish uchun bu ajoyib qo'llanma o'z ichiga turli foydali mashq va so'zlardan iborat bo'lib foydali bo'ladi degan umiddaman.
♻️@cambridgeIELTSbooks
#writing
Qani endi mana bu task 1 uchun tayyorlagan kichik qo’llanmani ilingchi. Ha evaziga izohlarda “ rahmat “ deb yozib qoldirish “tekin” aytib qo’yay😁. Oldingi postda qoldiribsizlarku, shundan ilhomlanib “tishimni kavagida” saqlayotganlarimni ham ulashyapman aytib qo’yay🤪.
👍@cambridgeieltsbooks
Ayrimlar hatto like bosish pullik deb o’ylaydimi deymanda “reaction”lar kamligini ko’rib ba’zan.
✅Writing time
This book is written by a certified professional IELTS instructor who scored Band 9.0 in Academic IELTS.
It provides useful tips and academic word lists for IELTS writing Task 1.
Sharing is caring🔥✊
#writing
✅Channel: @cambridgeIELTSbooks
✅Writing time
▶️TYPES OF IELTS WRITING TASK-2 QUESTIONS
1️⃣Discuss both views and give your opinion?
2️⃣Do you think the advantages outweigh disadvantages?
3️⃣What are the advantages and disadvantages?
4️⃣Is it a positive or a negative development?
5️⃣What are the problems/reasons/causes for this? What would you suggest as a solution?
6️⃣What are the reasons/causes? And how it affects? /what are the effects? /consequences?
7️⃣What are the reasons for this change? Is it a positive or a negative development?
8️⃣To what extent do you agree or disagree?
9️⃣How far do you agree or disagree?
1️⃣0️⃣Do you agree or disagree?
❗️Please note that serial numbers 8, 9 & 10 have the same essay structure
#writing
♻️Sharing is caring🤓
✅Channel: @cambridgeIELTSbooks
✅IELTS WRITING
▶️In this mini-book you will know types of writing task 1 and academic vocabulary to use.
#writing
🤓Kanalga qo'shiling 👇
⭐️@cambridgeIELTSbooks
YouTube|Instagram|Telegram
3 本写作书籍
https://x.com/lennysan/status/1918418517063512088
Lenny Rachitsky 最近推荐了对他写作帮助最大的 3 本书籍,On Writing Well、Nobody wants to read your sh*t、Several short sentences about writing。
这种可以直接 Deep Research 过一遍,感兴趣的可以选择性阅读,前面我们也分享了很多写作合集,参考、精进。
相关链接
关于如何写作丨主题分享
#writing