Python编程
Python包含多个用于构建图形用户界面(GUI)的工具包。
最具生产力的是真正的GUI构建工具,其中程序员只需通过鼠标直观地安排GUI窗口及其他组件,如数据库,就像在Windows Delphi 2.0中一样,几乎不需要键入任何代码。对于Python,只有Boa Constructor符合这一范式。虽然WXglade和Qt-designer等工具包也接近这一目标,但仍然不完整。
以下工具包的缺点包括:
- 部署困难:应用程序在特定的GNU-Linux安装上无法运行,除非进行大量额外工作。
- 崩溃:应用程序由于“位腐蚀”(bit-rot)无法正常工作。
Tkinter
Tkinter是一个Python包装器,用于Tcl/Tk,它提供了一个跨平台的GUI工具包。在Windows上,它与Python一起捆绑;在其他操作系统上,可以单独安装。虽然Tkinter提供的可用小部件数量少于一些其他工具包,但由于Tkinter的小部件是可扩展的,许多缺少的复合小部件(如组合框和滚动窗格)可以通过扩展性创建。
一个最小示例:
from Tkinter import *
root = Tk()
frame = Frame(root)
frame.pack()
label = Label(frame, text="Hey there.")
label.pack()
quitButton = Button(frame, text="Quit", command=frame.quit)
quitButton.pack()
root.mainloop()
PyGTK
PyGTK为GTK+库提供了一个便捷的包装器,供Python程序使用,它处理了许多繁琐的细节,如内存管理和类型转换。GTK+工具包在Linux、Windows和Mac OS X(正在移植中)上运行,但结合PyORBit和gnome-python后,更多的特性需要安装GNOME,并可以用来编写全功能的GNOME应用程序。
PyQt
PyQt是一个跨平台Qt C++工具包的包装器。它有许多支持SQL、OpenGL、SVG、XML和高级图形功能的窗口小部件和支持类。一个PyQt hello world示例:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class App(QApplication):
def __init__(self, argv):
super(App, self).__init__(argv)
self.msg = QLabel("Hello, World!")
self.msg.show()
if __name__ == "__main__":
import sys
app = App(sys.argv)
sys.exit(app.exec_())
wxPython
wxPython是一个跨平台的工具包wxWidgets的绑定。WxWidgets在Windows、Macintosh和Unix/Linux上都可用。
import wx
class test(wx.App):
def __init__(self):
wx.App.__init__(self, redirect=False)
def OnInit(self):
frame = wx.Frame(None, -1,
"Test",
pos=(50,50), size=(100,40),
style=wx.DEFAULT_FRAME_STYLE)
button = wx.Button(frame, -1, "Hello World!", (20, 20))
self.frame = frame
self.frame.Show()
return True
if __name__ == '__main__':
app = test()
app.MainLoop()
Dabo
Dabo是一个完整的三层应用框架。它的UI层包装了wxPython,并大大简化了语法。
import dabo
dabo.ui.loadUI("wx")
class TestForm(dabo.ui.dForm):
def afterInit(self):
self.Caption = "Test"
self.Position = (50, 50)
self.Size = (100, 40)
self.btn = dabo.ui.dButton(self, Caption="Hello World",
OnHit=self.onButtonClick)
self.Sizer.append(self.btn, halign="center", border=20)
def onButtonClick(self, evt):
dabo.ui.info("Hello World!")
if __name__ == '__main__':
app = dabo.ui.dApp()
app.MainFormClass = TestForm
app.start()
pyFltk
pyFltk是FLTK的Python包装器,FLTK是一个轻量级的跨平台GUI工具包。它非常容易学习,允许创建简洁的用户界面。
pyFltk中的"Hello World"示例如下:
from fltk import *
window = Fl_Window(100, 100, 200, 90)
button = Fl_Button(9,20,180,50)
button.label("Hello World")
window.end()
window.show()
Fl.run()
其他工具包
- PyKDE:是kdebindings包的一部分,提供了KDE库的Python包装器。
- PyXPCOM:提供了Mozilla XPCOM组件架构的包装器,使得可以在Python中使用独立的XUL应用程序。