wxpython systray图标菜单

时间:2010-01-06 20:27:00

标签: python wxpython

我正在设计一个我想在后台运行的应用程序。没有必要进行任何用户交互,因此我希望应用程序无形地运行以保存系统托盘图标。我希望该图标有一个菜单,只需在记事本中打开配置/帮助文件。有人能指出我正确的方向还是提供一个例子?

3 个答案:

答案 0 :(得分: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()

在你的Frame的 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()

请记住编辑Icon类中的项目以满足您的需求。

答案 1 :(得分:3)

您是否考虑将此应用程序作为Windows服务运行?许多用户会考虑系统托盘图标,几乎没有任何功能,令人讨厌。您仍然可以提供帮助/配置文件的链接作为开始菜单条目。

python win32 extensions package应该支持python服务。

当然,您仍然可能希望将其作为系统托盘图标运行。对不起,我对此没有任何经验。

答案 2 :(得分:2)

你想要wx.TaskBarIcon:

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

wxPython Demo包含您可以查看的示例代码。