Установить пользовательский значок всплывающей подсказки, используя win32gui с python?
Я видел много постов и вопросов об этом на других языках, в основном на C#, но не на python.
Я использую Windows 10, и при создании всплывающего уведомления всплывающей подсказки пользовательский значок, который я использую, показывает себя размытым и с черным полем вокруг него, я пробовал с разными значками, с разной высотой и шириной изображения, и никто не помог Также не помогло использование изображений.ico,.png и т. д.
Все, что я вижу в использовании пользовательских значков, это об использовании параметров, которые я не вижу в документации win32gui, или о расширении класса значков всплывающей подсказки, что, я не думаю, вы можете сделать через python.
В другом вопросе кто-то сказал, что вы должны использовать полный путь вместо использования os.path, чтобы получить полный путь, но это не помогло.
Это часть моего кода, часть, где я установил значок:
win32gui.UpdateWindow(self.hwnd)
icon_path_name = os.path.abspath(os.path.join(sys.path[0],
"notif.ico"))
icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
try:
hicon = win32gui.LoadImage(hinst, icon_path_name,
win32con.IMAGE_ICON, 0, 0, icon_flags)
except:
hicon = win32gui.LoadIcon(0, win32con.IDI_APPLICATION)
flags = win32gui.NIF_ICON | win32gui.NIF_MESSAGE | win32gui.NIF_TIP
nid = (self.hwnd, 0, flags, win32con.WM_USER+20, hicon, "tooltip1")
win32gui.Shell_NotifyIcon(win32gui.NIM_ADD, nid)
win32gui.Shell_NotifyIcon(win32gui.NIM_MODIFY,
(self.hwnd, 0, win32gui.NIF_INFO,
win32con.WM_USER+20, hicon,
"Notification", msg, 200, title))
1 ответ
Чтобы использовать предоставленный пользователем значок для всплывающего уведомления (преемник всплывающей подсказки в последних версиях Windows), в NOTIFYICONDATA
поместите ручку значка в hIcon
как обычно, и поставить значение 4 (NIIF_USER
) в вашем dwInfoFlags
:
NIIF_USER = 4
# ...
win32gui.Shell_NotifyIcon(win32gui.NIM_MODIFY,
(self.hwnd, 0, win32gui.NIF_INFO,
win32con.WM_USER+20, hicon,
"Notification", msg, 200, title, NIIF_USER))
( документы дляNOTIFYINFODATA
)
Я не уверен, что проблемы размытия и фона; все, что я могу предложить, - это убедиться, что растровые изображения в вашем файле значков имеют соответствующие альфа-маски, и что вам понадобится 32x32 для системного трея и более крупный для окна всплывающей подсказки, и отрегулируйте icon_flags
как необходимо.