Tkinter在Ubuntu设置窗口图标遇到的问题

使用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下效果:

tkinter-icon-windows

Ubuntu VPS上截图:

tkinter-icon-ubuntu

Ubuntu VPS配置轻量级图形桌面LXDE和VNC

前几天我买了个Windows VPS,用于上传文件,1 TB流量很快就用尽了。

为了省钱,今天又买了一个Ubuntu VPS,有2TB的流量,价格比winVPS还便宜。

为了方便地用浏览器上传,而无需额外编码,需要安装图形桌面。

LXDE是首选,它占用资源很少,只需几十MB内存。

1. 配置lxde和vnc server

安装x window:

apt-get install xorg

安装lxde:

apt-get install lxde-core

安装svn server:

apt-get install tightvncserver

第一次运行vnc server生成配置文件,需要输入密码:

tightvncserver :1
tightvncserver -kill :1

编辑~/.vnc/xstartup文件,在尾部添加:

lxterminal &
/usr/bin/lxsession -s LXDE &

启用vnc server:

vncserver -geometry 800x600

2. 下载vnc viewer

在这里下载: http://www.realvnc.com/download/viewer/

打开客户端,输入IP:590x,这里x是x桌面的编号:

vnc-viewer

连接后输入密码,就可以进入桌面了。

3. 解决中文乱码

VPS默认locale是en,程序在创建文件和文件夹的时候会出现乱码。

cd /usr/share/locales
./install-language-pack zh_CN
apt-get install language-pack-zh-hans
apt-get install ttf-wqy-zenhei 
vi /etc/default/locale    
#修改为
#LANG="zh_CN.UTF-8"
#LANGUAGE="zh_CN:zh"

关闭putty,重新打开shell,执行locale,就可以看到语言设置是中文了

4. 接着解决putty中文乱码

在putty的选项中设置: window -> Appearance -> Font Settings
字体选择“新宋体”,脚本选择“中文GB2312”,
window -> Translation -> Remote Character Set选择 UTF-8,
勾选下面的两项:
1. Treate CJK …
2. Caps Lock …
在windows下写的python脚本,所有print输出编码为gbk的字符串,都应该修改为编码为utf8。