Python 编程/GUI 编程
有各种可从 Python 使用的 GUI 工具包。
真正高效的 GUI 生成器,程序员可以使用鼠标在直观的界面上安排 GUI 窗口和其他组件(如数据库),就像 Windows Delphi 2.0 中那样。 很少需要键入。 对于 python,只有 Boa Constructor 遵循这种范式。 WXglade 和 Qt-designer、monkey studio 等,在某种程度上接近但仍然不完整。
以下工具包的缺点是
- 部署困难 - 应用程序不会在特定的 GNU-Linux 安装上运行,除非进行大量额外工作。
- 损坏 - 应用程序由于代码腐烂而无法正常工作。
Tkinter 是一个 Python 对 Tcl/Tk 的包装器,提供了一个跨平台的 GUI 工具包。 在 Windows 上,它与 Python 捆绑在一起; 在其他操作系统上,它可以被安装。 可用的小部件集比其他一些工具包要小,但由于 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()
主章节: Tkinter.
链接
- 24.1. Tkinter — Python 对 Tcl/Tk 的接口, python.org
- Tkinter 8.5 参考: Python 的 GUI, infohost.nmt.edu; 与 pdf 相同
- Tkinter 入门, effbot.org
另见书籍 用于 GUI 编程的 PyGTK
PyGTK 为 Python 程序提供了对 GTK+ 库的便捷包装器,处理了许多乏味的工作,如管理内存和类型转换。 简单的 GTK+ 工具包在 Linux、Windows 和 Mac OS X(端口正在进行中)上运行,但更高级的功能(与 PyORBit 和 gnome-python 结合使用)需要 GNOME 安装,并且可以用于编写功能齐全的 GNOME 应用程序。
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_())
PyQt 是一组针对跨平台的 Qt 应用程序框架的绑定。 PyQt v4 支持 Qt4,PyQt v3 支持 Qt3 和更早版本。
针对跨平台工具包 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 是一个完整的 3 层应用程序框架。 它的 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 是一个针对 FLTK 的 Python 包装器,这是一个轻量级的跨平台 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 应用程序。 XUL 工具包传统上被包装在 XPCOM 的各个其他部分中,但随着 libxul 和 XULRunner 的出现,这应该变得更加可行。 如今,没有人出于很好的理由使用 PyXPCOM:PyXPCOM 给人以失效的链接和过时不兼容的 Firefox 扩展。
- 图形用户界面常见问题解答, python.org
- 摘自第 20 章: GUI 开发,来自 Windows 上的 Python 编程, onlamp.com, 由 Mark Hammond 和 Andy Robinson 撰写; 涵盖 Tkinter、PythonWin 和 wxPython
- Google Ngram Viewer: Tkinter、wxPython、wxWidgets、PyGTK、PyQt