wxpython系统托盘图标菜单

1 投票
3 回答
2789 浏览
提问于 2025-04-15 17:42

我正在设计一个应用程序,希望它能够在后台运行。这个应用不需要用户进行任何操作,所以我希望它能在后台默默运行,除了在系统托盘里有一个图标。我希望这个图标能有一个菜单,点击后可以用记事本打开配置文件或帮助文件。有人能给我一些建议或者示例吗?

3 个回答

3

你有没有想过把这个应用程序当作Windows服务来运行呢?很多用户会觉得系统托盘里的图标,如果功能很少或者没有功能,就会觉得很烦。你可以在开始菜单里提供一些帮助链接或者配置文件的入口。

Python的win32扩展包应该支持Python服务。

当然,你可能还是有理由想把它作为系统托盘图标来运行。我很抱歉我没有这方面的经验。

5

你可能可以用更简单的方法来做到这一点,不过我之前用一些示例创建了一个类,用来处理任务栏图标的基本构建。

这是文件名:TaskBarIcon.py

import wx


ID_SHOW_OPTION = wx.NewId()
ID_EDIT_OPTION = wx.NewId()


class Icon(wx.TaskBarIcon):

    def __init__(self, parent, icon, tooltip):
        wx.TaskBarIcon.__init__(self)
        self.SetIcon(icon, tooltip)
        self.parent = parent
        self.Bind(wx.EVT_TASKBAR_LEFT_DCLICK, self.OnLeftDClick)
        self.CreateMenu()

    def CreateMenu(self):
        self.Bind(wx.EVT_TASKBAR_RIGHT_UP, self.OnPopup)
        self.menu = wx.Menu()
        self.menu.Append(ID_SHOW_OPTION, '&Show Option 1')
        self.menu.Append(ID_EDIT_OPTION, '&Edit Option 2')
        self.menu.AppendSeparator()
        self.menu.Append(wx.ID_EXIT, 'E&xit')

    def OnPopup(self, event):
        self.PopupMenu(self.menu)

    def OnLeftDClick(self, event):
        if self.parent.IsIconized():
            self.parent.Iconize(False)
        if not self.parent.IsShown():
            self.parent.Show(True)
        self.parent.Raise()

在你的框架的init()方法里,添加下面这两行:

self.TrayIcon  = tbi.Icon(self, wx.Icon("C:\\YourIcon.png", wx.BITMAP_TYPE_PNG), "ToolTip Help Text Here")
self.Bind(wx.EVT_ICONIZE, self.OnIconify)

然后只需把这个函数添加到你的框架里,你就可以使用了:

def OnIconify(self, event):
    self.Hide()

记得根据你的需求修改图标类里的项目哦。

2

你想要使用 wx.TaskBarIcon:

http://docs.wxwidgets.org/stable/wx_wxtaskbaricon.html

wxPython 的示例程序里有你可以参考的代码。

撰写回答