跳轉到內容

Python 程式設計/GUI 程式設計

來自 Wikibooks,開放世界中的開放書籍


有各種可從 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.

連結

另見書籍 用於 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 擴充套件。
[編輯 | 編輯原始碼]
華夏公益教科書