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