Установить свойства виджета в 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
😄As
➖➖➖➖➖➖
🔘 As, as a conjunction, can be used to say that things are happening at the same time. We use 'as' with the background event, or when there are two short events
🔜 As you watch this video, I hope you take notes
🔘 As can introduce the reason for something, especially when it's something that we already know about.
🔜 As it's nice today, I'm going to work outside.
🔘 As can link to the way that something is done.
🔜 Watch me and do it as I do it.
#As👨🏫@America
➖➖➖➖➖➖➖➖➖➖➖➖
🆕 Crypto News @Money
😁 Crypto Game @Egame
🇺🇸 US News @America
🇯🇵 Japan News @Japan
🇦🇪 UAE News @Dubai
▶️ Popular Movies @Videos
😜 Best Funny Video @Funnys
Telegram Telah Mengubah Pendekatannya dalam Bekerja Sama dengan Pihak Berwenang AS
Menurut data baru yang dirilis Telegram, perusahaan pengirim pesan itu telah meningkatkan kerja samanya dengan lembaga penegak hukum Amerika Serikat secara signifikan pada tahun 2024.
• Telegram telah memenuhi 900 permintaan dari otoritas AS untuk tahun 2024, menyediakan data untuk 2.253 pengguna.
• Hanya 14 permintaan yang memengaruhi 108 pengguna yang telah diproses hingga Oktober 2024.
• Jumlah permintaan yang dipenuhi meroket setelah CEO Pavel Durov ditangkap di Prancis pada bulan Agustus 2024.
• Telegram memperbarui kebijakan privasinya pada bulan September, yang mengizinkan pengungkapan alamat IP dan nomor telepon kepada penegak hukum, tetapi hanya jika diwajibkan secara hukum.
Para ahli mengaitkan perubahan kebijakan Telegram dengan meningkatnya tekanan dari regulator di berbagai negara. Sebelumnya, perusahaan tersebut dikenal karena penolakannya untuk bekerja sama dengan pihak berwenang dalam penyediaan data pengguna.
Telegram belum memberikan komentar resmi apa pun tentang peningkatan jumlah permintaan yang terpenuhi saat artikel ini ditulis.
#AS