使用SysTrayIcon在Python3 Windows系统中创建系统托盘应用

在Windows操作系统中,系统托盘是任务栏上的一个区域,用于显示各种系统图标和通知。如果你想在Python程序中创建一个系统托盘应用,可以使用SysTrayIcon库。本文将向您介绍如何使用SysTrayIcon库创建一个简单的系统托盘应用。

安装SysTrayIcon库

在开始之前,我们需要先安装SysTrayIcon库。可以通过以下命令使用pip安装:

pip install infi.systray

创建一个基本的系统托盘应用

下面是一个使用SysTrayIcon库创建的简单的系统托盘应用的示例代码:

import infi.systray

def on_quit_callback(systray):
    # 退出时的回调函数
    systray.shutdown()

menu_options = (("Say Hello", None, lambda systray: print("Hello")),
                ("Say Goodbye", None, lambda systray: print("Goodbye")))
systray = infi.systray.SysTrayIcon("icon.ico", "Example", menu_options, on_quit=on_quit_callback)
systray.start()

在上面的代码中,我们首先导入了infi.systray模块。在menu_options中,我们定义了两个菜单选项"Say Hello"和"Say Goodbye"。每个菜单选项都有一个回调函数,当用户点击菜单选项时,回调函数会被调用。

接下来,我们创建了一个SysTrayIcon实例,并传入一个ICO图标文件的路径、应用的名称、菜单选项和退出时的回调函数。最后,通过调用start方法启动系统托盘应用。

以上代码运行后,将在系统托盘中显示一个图标,并在点击菜单选项时输出相应的消息。

高级功能和定制化

SysTrayIcon库还提供了许多高级功能和定制化选项,使您能够创建更复杂和交互性强的系统托盘应用。

修改图标

可以使用以下代码来修改图标:

systray.update(icon="new_icon.ico")

显示通知

可以使用以下代码来显示通知:

systray.show_message("Title", "Message", infi.systray.icon_info.SMALL_ICON)

监听系统事件

可以使用以下代码来监听系统事件:

def on_focus_callback(systray, hwnd):
    # 当窗口获得焦点时的回调函数
    print("Window focused")

systray.update(callback=on_focus_callback)

完整代码示例

下面是一个更完整的例子,演示了如何使用SysTrayIcon库创建一个具有菜单选项、图标修改和系统事件监听功能的系统托盘应用:

import infi.systray

def on_quit_callback(systray):
    # 退出时的回调函数
    systray.shutdown()

def on_focus_callback(systray, hwnd):
    # 当窗口获得焦点时的回调函数
    print("Window focused")

menu_options = (("Say Hello", None, lambda systray: print("Hello")),
                ("Say Goodbye", None, lambda systray: print("Goodbye")))
systray = infi.systray.SysTrayIcon("icon.ico", "Example", menu_options, on_quit=on_quit_callback)
systray.update(callback=on_focus_callback)
systray.start()

甘特图

下面是一个使用mermaid语法表示的甘特图,展示了代码的执行流程:

gantt
    dateFormat YYYY-MM-DD
    section 创建并启动SysTrayIcon
    创建SysTrayIcon实例  :done, 2022-01-01, 1d
    启动SysTrayIcon应用 :done, 2022-01-02, 1d
    section 系统托盘应用运行中
    监听系统事件 :done, 2022-01-03, 4d
    section 用户交互
    用户点击菜单选项 :done, 2022-01-07, 1d
    修改图标 :done, 2022-01-08, 1d