跳转到内容

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 扩展。
[编辑 | 编辑源代码]
华夏公益教科书