使用Tkinter Package来开发Python GUI程序是非常迅速的,但是它的一些细节不太完美。
在windows环境,设置窗口图标只需要一行代码:
root.iconbitmap(default='myicon.ico')
但这行代码在Ubuntu上无法正常工作,提示myicon.ico not defined。
实际上,我在ubuntu上将图标换成一个x bitmap,依然无法正常工作。
解决在Ubuntu和Mac上出现的这个问题:
1. 安装PIL(python imaging library),支持更多的图像格式,建议制作gif格式64×64做为图标
2. iconbitmap函数封装了tk的iconbitmap窗口消息,我们换成使用Tkinter一个未封装的iconphoto消息
3. windows和linux可以使用同样的代码,也可以根据os.name分支
安装PIL
PIL的地址是:http://www.pythonware.com/products/pil/,我选择的是最新的1.17
下载解压之后,还不能立即安装,执行:
apt-get install python-dev
apt-get install libjpeg-dev
前者提供需要的头文件,后者安装了所需的jpeg decoder。
然后,在setup.py中跳到214行
add_directory(library_dirs, "/usr/lib")
在它前面添加:
add_directory(library_dirs, "/usr/lib/i386-linux-gnu")
参考: http://stackoverflow.com/questions/8479344/pil-encoder-jpeg-not-available
随后即可正确安装:
./setup.py build
./setup.py install
我们的python代码可以这样写:
from ImageTk import PhotoImage icon = PhotoImage(file='icon.gif') root.tk.call('wm', 'iconphoto', root._w, icon)
可以看到这里是发送的window message iconphoto。
windows下效果:
Ubuntu VPS上截图: