blog
blog copied to clipboard
Python之旅:第十二章-图形用户界面
Table of Contents generated with DocToc
-
Python之旅:第十二章-图形用户界面/
-
创建GUI示例程序
- 初探
- 布局
- 事件处理
- 最终程序
-
创建GUI示例程序
Python之旅:第十二章-图形用户界面/
本章将简短的介绍Python程序创建图形用户界面(GUI)的基本知识。GUI就是包含按钮、文本框等空间的窗口。
Tkinter
是Python标准的GUI工具包,包含在Python的标准安装中。
创建GUI示例程序
为了演示Tkinter
的用法,我们将创建一个简单的GUI应用程序,这个程序是一个非常简单的文本编辑器。它主要有以下功能:
- 让用户能打开指定的文本文件
- 让用户能编辑文本文件
- 让用户能保存文本文件
- 让用户能退出程序
初探
首先,我们必须导入tkinter
,为保留其命名空间,也可以对其重命名。
>>> import tkinter as tk
当然,如果你愿意,也可以导入整个模块的所有内容
>>> from tkinter import *
我们在交互式解释器上做这些工作,要创建GUI,可创建一个充当主窗口的顶级组件(控件),为此,可实例化一个TK
对象。
>>> top = tk.Tk()
此时将出现一个窗口,在常规程序中,我们将调用函数mainloop
以进入Tkinter
主事件循环,而不是直接退出程序。
>>> mainloop()
现在我们来创建一个按钮,可直接调用实例tk
中的Button
方法来创建,然后使用pack
方法来布局
>>> btn = tk.Button()
>>> btn.pack()
这时你应该能看到一个空白的按钮出现在GUI窗口上了,不过这个按钮还没有文本,我们来添加一个
>>> btn['text'] = 'Click me!'
同时,我们也可以给这个按钮添加行为,先定义一个函数,然后将这个函数应用到这个按钮上
def clicked():
print('I was clicked!')
>>> btn['command'] = clicked
我们也可以使用方法config
来为btn
同时添加多个属性,而不是一个一个地添加
>>> btn.config(text='Click me!', command=clicked)
同时,你也可以使用控件的构造函数来配置控件的各种属性
>>> Button(text='Click me too!', commang=clicked).pack()
布局
控件调用方法pack
时,将把控件放在其父控件(主控件)中,要指定主控件,可使用构造函数的第一个可选参数,如果没有指定,则会把顶级主窗口用作主控件
Label(text='I am in the first window!').pack()
second = Toplevel()
Label(second, text="I'm in the second window!").pack()
pack()
方法提供多个参数来控制控件摆放的位置,比如可将参数side
设置为LEFT
,RIGHT
,TOP
和BOTTOM
,要让控件在x
或y
方向上填满分配给它的空间,可将参数fill
设置为x
、y
或BOTH
。要让控件随父控件一起增大,可将参数expand
设置为True
。如果还想知道更多个选项,可以使用help
查看
>>> help(Pack.config)
布局管理器除了pack
,还有grid
和place
。
事件处理
从前面的示例我们知道,可以通过设置属性command
为按钮指定动作,这是一种特殊的事件处理,但Tkinter
还为我们提供了更通用的事件处理机制:bind
,要让控件对特定的事件进行处理,可对其调用方法bind
,并指定事件的名称和要使用的函数。
>>> import tkinter as tk
>>> top = tk.Tk()
>>> def callback(event):
print(event.x, event.y)
>>> top.bind('<Button-1>', callback)
'4591238472callback'
最终程序
要创建单行文本框,可使用控件Entry
,要创建可滚动的多行文本区域,可结合使用控件Text
和Scrollbar
,但模块tkinter.scrolledtext
已提供了一种实现。要提取Entry
控件的内容,可使用其方法get
,对于ScrolledText
对象,我们将使用其方法delete
和insert
来删除文本。
本章节完毕
本系列目录: