Python使用winIco编写一个托盘图标不停闪烁的小程序

昨天测试了使用Tkinter来编写简单的托盘程序,总体说来是非常方便的,代码在Windows和Linux下都能很好地工作。

Windows下,Tkinter可以使用封装好的winIco API: tktable/winico
下载最新的0.6即可。 (05年发布,有人提到64位系统下无法正常工作,我没有测试)
另外,还可以参考这个TCL项目: http://cran.r-project.org/web/packages/tcltk2/

里面有个package ico1.0,是在winIco的基础上修改的,但是它的接口已经改变,如果你对TCL脚本熟悉,建议使用。

1. 解压dll到tcl文件夹

下载winIco0.6之后,直接解压到tcl文件夹下,类似: D:\Python27\tcl\winico0.6。
测试python下是否可用:

>>> from Tkinter import Tk
>>> root = Tk()
>>> root.tk.call('package', 'require', 'Winico')
'0.6'

2. 合成不同的图标到一个ico文件

程序在托盘不停闪烁图标,利用了在一个ico文件中,可以集成多个不同大小、颜色的图标资源。
我使用了Greenfish Icon Editor Pro来合并图标文件:
join-icons
第一个图标对应的是#0,第二个图标对应的是#1。还可以继续添加其他需要使用到的图标。

3. python调用winIco

winIco提供的接口非常简单:https://www.lijiejie.com/python/winico/winico.html

  1. 使用createfrom可以直接从ico文件创建图标资源。
  2. load命令可以从exe或dll中加载图标资源
  3. info命令则是获取某个句柄对应的若干图标资源的信息:  包括编号、大小、颜色深度
  4. taskbar命令用于添加、修改、删除托盘图标,重要的参数包括了-callback(回调函数)、-pos(图标资源序列号)、-text(托盘图标的提示文本),在回调函数中,可以通过%m参数来传递窗口消息。

在添加托盘图标时,可以用-callback参数指定回调函数,比如右键点击弹出菜单。

我写了一个简单的示例程序:
flash-trayicon-sample
这个地球图标会不停闪烁(0.5秒切换一次),右键单击,可弹出一个菜单。 源代码在这里