图形界面
Python 支持多种图形界面的第三方库,包括
- Tk
- wxWidgets
- Qt
- GTK
等等。
Python 自带的库,支持 Tk 的 Tkinter,不需要安装其他的包,就可以直接使用。
Tkinter
Tk 是图形库,支持多种操作系统,使用 Tcl 语言开发;
Tk 会调用操作系统提供的本地 GUI 接口,完成最终的 GUI。
所以代码实现的只需要调用 Tkinter 提供的接口就可以。
GUI 程序
编写 GUI 版本的 “Hello, world!”
先导入 Tkinter 库
Python 3.x 版本,使用的库名为 tkinter,即首写字母 T 为小写
from tkinter import *
从 Frame
派生一个 Application
类,这是所有 Widget 的父容器:
class Application(Frame):
'''由 Frame 派生 Application
'''
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
self.create_widgets()
def create_widgets(self):
self.hello_label = Label(self, text='Hello, world!')
self.hello_label.pack()
self.quit_button = Button(self, text='Quit', command=self.quit)
self.quit_button.pack()
在 GUI 中,每个 Button、Label、输入框等,都是一个 Widget。Frame 则是可以容纳其他 Widget 的 Widget,所有的 Widget 组合起来就是一棵树。
pack()
方式把 Widget 加入父容器中,并实现布局。pack()
是最简单的布局,grid()
可以实现更复杂的布局。
在 create_widgets()
方法中,创建一个 Label
和 Button
,当 Button 被点击时,触发 self.quit()
使程序退出。
然后,实例化 Application
,并启动消息循环:
# 实例化 Application
app = Application()
# 设置窗口标题
app.master.title('Hello World')
# 主消息循环
app.mainloop()
GUI 程序的主线程负责监听来自操作系统的消息,并依次处理每一条消息。因此,如果消息处理非常耗时,就需要在新线程中处理。
运行上面 GUI 程序的效果:
点击 Quit
按钮退出或者左上角的 x
结束程序
输入文本
我们再对这个 GUI 程序改进一下,加入一个文本框,让用户可以输入文本,点击按钮可以弹出消息对话框。
from tkinter import *
import tkinter.messagebox as messagebox
class Application(Frame):
def __init__(self, master=None):
'''初始化函数
'''
Frame.__init__(self, master)
self.pack()
self.create_widgets()
def create_widgets(self):
'''创建部件
'''
self.name_input = Entry(self)
self.name_input.pack()
self.alert_button = Button(self, text='Hello', command=self.hello)
self.alert_button.pack()
def hello(self):
'''接收用户输入,显示信息
'''
name = self.name_input.get() or 'world'
messagebox.showinfo('Message', 'Hello, {}'.format(name))
# 实例化 Application
app = Application()
# 设置窗口标题
app.master.title('Hello World')
# 主消息循环
app.mainloop()
代码运行流程,当用户点击按钮,触发 hello()
,通过 self.nameInput.get()
获得用户输入的文本后,使用 tkMessageBox.showinfo()
弹出消息对话框。
程序运行的效果如下:
以上就是本篇的主要内容。