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