Установить пользовательский значок всплывающей подсказки, используя 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 как необходимо.

Другие вопросы по тегам