Установить свойства виджета в 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
Windows 11 二月更新可能导致部分三星笔记本电脑用户无法访问 C 盘
#Bug
微软正在调查一个影响部分三星笔记本电脑的问题。这些用户在安装 2026 年 2 月安全更新后无法访问 C 盘,无法启动应用。微软表示正与三星合作以确定该问题是否与 Windows 更新或受影响设备上安装的三星软件有关。微软称,受影响用户会遭遇 C 盘无法访问,访问被拒绝的错误信息。该问题也阻止用户访问文件,启动 Outlook、Office、浏览器、系统工具和快速助手(Quick Assist)。问题主要发生在巴西、葡萄牙、韩国和印度,影响三星 Galaxy Book 4 等消费类设备。该问题可能与三星共享应用有关,但确切原因尚未确认。
https://www.bleepingcomputer.com/news/microsoft/microsoft-windows-11-users-cant-access-c-drive-on-some-samsung-pcs/
💀«Durov has died», «you will be killed tomorrow», «message not delivered», «access to the server has been completely terminated» — these scary messages were sent from the official Telegram account? These messages have been spreading since the launch of the Guest Mode functionality for bots. The most interesting thing is that the bot guest mode works not only in groups, but also in personal messages. And +42777 (and other support accounts) are also PMs.
🤖 At first, there was a #bug where forwarding messages from a PM sent by a bot with guest mode was attributed to your interlocutor — not a bot. You can imagine that a guy created his own bot where by writing " @yourbot" (without quotes) he sent a certain word specified in the script. 🔹 Now guest mode does not work in support, and the bug has been fixed — the authorship of forwarded messages is assigned correctly.
Source: 💌💌💌
Windows 11 一月更新可能导致部分 PC 无法启动
#Bug
根据微软的支持文档,Windows 11 一月安全更新可能导致部分 PC 无法启动,它正在收集用户和 IT 管理员的反馈。用户无需卸载此更新,因为该问题“仅限于”特定 PC。目前不清楚有多少用户受到影响,微软列出了两个受影响的平台:KB5074109 – Windows 11 25H2 和 KB5074109 – Windows 11 24H2。微软称,受影响的 PC 可能会突然停止启动,出现黑屏死机 (BSOD)错误,错误代码为 UNMOUNTABLE_BOOT_VOLUME。
https://admin.cloud.microsoft/Adminportal/Home?source=applauncher#/windowsreleasehealth/:/issue/WI1221934