Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2012-02-20) 使用Python实现“信息更新上传工具”(2)

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

1. Python 2 vs. Python 3

首先要到python.org上下载python,遇到一个难题:下载Python2还是Python3? 两者之间的语法有不同,不能兼容。经过简单地搜索,决定使用python2,原因很简单:很多python库只支持python2.x,而python的威力就体现在它强大的库上。 马上又遇到一个新的选择:是下载32位还是64位?我用的win7是64位的。最后决定还是下载32位的,因为有一些库只支持32位。 最后下载了python2.x的最新版2.7.2

2. 编辑器

鉴于idea用得比较舒服,自然想在idea下写python。但是安装完python插件后,发现它依赖的某几个插件没有提供了,意味着我们不能继续在idea的社区版里使用python了。只好转用Intellij提供的PyCharm,话说这一点Intenllij做的有点不厚道,为了自己的商业产品阉割社区版的功能。

PyCharm也还算好用,基本功能都有了,但在方法提示上,似乎还有所欠缺。

3. Python +Tkinter

Python中自带了Tkinter这个GUI库。Tkinter是对TCL/TK提供的GUI库的包装,用起来相当简单,但是功能比较弱,界面一般。

看个Hello,world:

image

其代码相当简单:

from Tkinter import *

root = Tk()
label = Label(root, text=“Hello, world!“)
label.pack()
root.mainloop()

我本想就使用Tkinter来做,但是很快发现它提供的组件比较少,比如Table等,还需要第三方的库,考虑到以后不要重新返工,还是使用其它的比较靠谱。

4. Python + QT

QT功能强大,文档非富,还有大公司支持,非常值得一试。它还提供了一个LGPL的License比较好。关于Python的binding,有一个老牌的PyQT,可惜是GPL+商业授权,只好放弃。好在QT自己也提供了一个新的LGPL的binding,叫PySide,它的API与PyQt相似,甚至可直接把PyQt的示例拿过来用。看了一下它提供的例子,效果非常满意:

image

没错,写的是PyQt Examples,但是实际上是在PySide下运行,里面的例子效果很不错。我需要的Table在这里:

image

这里是一个PySide的Hello,world:

import sys
import PySide
from PySide.QtCore import *
from PySide .QtGui import *

app = QApplication(sys.argv)
label = QLabel(“Hello, world”)
label.show()

app.exec_()
sys.exit()

可以看出代码非常简单,跟Tkinter很像,很喜欢。

现在唯一担心的就是,将Python+PySide+QT打包之后的绿色版软件体积有多大,光那个Qt的dll好像就8M多。这个等这两天试验一下,如果体积太大的话,就改用Python+wxWidgets吧。

5. Python + wxWidgets

这个binding叫wxpython,官网是http://wxpython.org,它跟wxWidgets一样,也有LGPL的授权。

代码也比较简单,看下面这个Hello, world:

import wx

app = wx.App(False)
frame = wx.Frame(None, wx.ID_ANY, “Hello World”)
frame.Show(True)
app.MainLoop()

让我十分不习惯的是方法名是大写的,感觉很别扭。wxWidgets与QT比较相似,但是没有那么好的运气被大公司收购,所以还是先尝试QT吧。

comments powered by Disqus