Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下:
tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
wxPython:wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能健全的 GUI 用户界面。
Jython:Jython 程序可以和 Java 无缝集成。除了一些标准模块,Jython 使用 Java 的模块。Jython 几乎拥有标准的Python 中不依赖于 C 语言的全部模块。比如,Jython 的用户界面将使用 Swing,AWT或者 SWT。Jython 可以被动态或静态地编译成 Java 字节码。
tkinter模块
tkinter是Python下默认的GUI标准库。tkinter 最大的优点就一个字:快,再一个,是Python自带的。
使用Tkinter创建GUI程序一般包括以下5个主要步骤:
导入Tkinter模块(import tkinter 或 from tkinter import *)。
创建一个顶层窗口对象,用于容纳整个GUI应用组件。
在顶层窗口对象上(或其中),构建所有的GUI组件及其功能。
通过底层的应用代码将这些GUI组件连接起来。
进入主事件循环。
窗口和控件
在GUI编程中,顶层根窗口对象包含组成GUI应用窗口的所有小窗口对象。可能是标签、按钮、文本框等。这些独立的GUI组件也被称为控件。
一个GUI程序可以有多个顶层窗口,但只能有一个根窗口。控件可以独立存在,也可以作为容器存在。如果一个控件包含其它控件,就可以将其认为是那个控件的父控件。相应地,如果一个控件被其它控件包含,则将其认为是那个控件的子控件。
通常控件都有一些相关的行为,比如按下按钮、将文本写入到文本框等。这些用户行为称为事件,而GUI对这类事件的响应称为回调。
事件驱动处理
事件可以包括按钮按下(及释放)、鼠标移动、点击回车键等。一个GUI应用从开始到结束就是通过整套事件体系来驱动的。这种方式称为事件驱动处理。
拿最简单的来说,鼠标移动就是一个带有回调的事件的例子。假设鼠标指针正停在GUI应用顶层窗口的某处。如果你将鼠标移动到应用的另一部分,鼠标移动的行为会被复制到屏幕的光标上,于是看起来像是根据你的手移动的。系统必须处理的这些鼠标移动事件可以绘制窗口上的指针移动。当释放鼠标时,不再有事件需要处理,此时屏幕会重新恢复闲置的状态。事件驱动的GUI处理本质上非常适合于客户端/服务端架构。当启动一个GUI应用时,需要一些启动步骤来准备核心部分的执行,就像网络服务器启动时必须先分配套接字并将其绑定到本地地址上一样。GUI应用必须先创建所有的GUI组件,然后将它们绘制在屏幕上。这是布局管理器(geometry manager)的职责所在。当布局管理器排列好所有控件(包括顶层窗口)后,GUI应用进入其类似服务器的无限循环。这个循环会一直运行,直到出现GUI事件,进行处理,然后再等待更多的事件去处理。
tkinter示例
创建一个窗口对象
import tkinter top = tkinter.Tk() # 进入主事件循环 top.mainloop()
添加控件示例
import tkinter import tkinter.messagebox top = tkinter.Tk() #按钮事件回调函数 def CallBack(): tkinter.messagebox.showinfo ( "信息框标题", "Hello World") #窗口大小 top.geometry("250x150") #创建一个label标签 label = tkinter.Label( top , text='hello world!') #创建一个按钮 button1 = tkinter.Button( top , text='信息框',command=CallBack) #将控件放置到top主窗口中 label.pack() button1.pack() tkinter.mainloop()
Tkinter 组件
Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。
目前有二十多种Tkinter部件用于GUI应用:
Button:按钮控件;在程序中显示按钮。
Canvas:画布控件;显示图形元素如线条或文本,也可以包含图像、位图等。
Checkbutton:多选框控件;用于在程序中提供多项选择框。
Entry:输入控件;用于显示简单的文本内容,与HTML中文本输入框类似。
Frame:框架控件;在屏幕上显示一个矩形区域,多用来作为容器。
Label:标签控件;可以显示文本和位图。
LabelFrame:labelframe 是一个简单的容器控件。常用与复杂的窗口布局。
Listbox:列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户。
Menubutton:菜单按钮控件,由于显示菜单项。
Menu:菜单控件;显示菜单栏,下拉菜单和弹出菜单。
Message:消息控件;用来显示多行文本,与label比较类似。
Radiobutton:单选按钮控件;显示一个单选的按钮状态。
Scale:线性滑块控件;显示一个数值刻度,为输出限定范围的数字区间。
Scrollbar:滚动条控件,当内容超过可视化区域时使用,如Listbox、Text、Canvas。
Text:多行文本控件;用于显示输入多行文本。
Toplevel:容器控件;用来提供一个单独的对话框,和Frame比较类似。
Spinbox:带调节按钮输入控件,可以数值进行调整。
PanedWindow: 一个窗口布局管理的插件,可以包含一个或者多个子控件。
Toplevel:与Frame类似,不过它提供了一个单独的窗口容器。
messagebox:用于显示你应用程序的消息框。