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应用程序。
Last modified: Friday, 31 January 2025, 1:27 AM