将wxpython应用最小化为系统托盘图标,并通过单击或热键“弹出”它

时间:2011-08-19 13:03:32

标签: wxpython

我有一个工作的wxpython应用程序(一个简单的ssh / rdesktop启动器)。我想添加3个新功能,但我不知道从哪里开始。

1.-当应用程序启动时,或当用户点击标准框架“最小化”按钮时,我希望应用程序最小化到系统托盘图标(我正在运行gnome)。

2.-当用户左键或右键单击图标时,应用程序应“取消最小化”。

3.-当用户按下热键(比方说CTRL + ALT + S)时,应用程序应该“取消最小化”。

一个带有空窗口的简单示例将不胜感激。

PS:必须从外部ico文件加载图标吗?我的应用程序是一个“单个文件”.py应用程序;我可以从.py本身加载资源,从列表/数组中的.ico数据加载吗?

2 个答案:

答案 0 :(得分:1)

要使应用程序最小化到系统托盘,您需要wx.EVT_ICONIZE,并且在处理程序中,您只需调用框架的Hide()方法。您需要在任务栏图标代码中捕获鼠标事件,如EVT_LEFT_DOWN或EVT_RIGHT_DOWN,并正确显示应用程序。您可以使用wxPython演示中的一些示例代码,或者本文还有一些创建任务栏图标的说明:http://www.blog.pythonlibrary.org/2008/04/03/reading-openvpn-status-data-with-python/

热键部分需要在操作系统本身注册,具体取决于操作系统。我不知道如何让它工作。

要在Python代码中创建图标,默认的wxPython发行版中包含一个名为img2py的小实用程序:http://www.wxpython.org/docs/api/wx.tools.img2py-module.html基本上它以纯文本形式创建图标,您可以导入它并以这种方式使用它或者您可以只需将创建文件中的代码直接复制到主代码中即可。

答案 1 :(得分:0)

我在wxPerl中做了类似的事情,所以这里有一个简短的概述:

您需要wx.TaskBarIcon及其事件才能实现图标。您可以override the window's EVT_CLOSE event捕获窗口关闭。您还应该能够使用EVT_ICONIZE来检测最小化。最后,使用wxWindow::Show(boolean)切换窗口的可见性。

我不知道是否可以做一个热键。 wx Wiki mentions support for global hotkeys,但建议它仅适用于Windows。还有ways to do it using Xlib,但我不知道它是否适用于wxPython。

可能更容易添加对触发现有实例窗口的命令行标志的支持,然后使用GNOME(和Windows)中的自定义键盘快捷键支持以此方式启动它。