为了实现现实项目的需求,在创建一个窗口以后,需要根据程序的功能向窗口中添加对应的组件,然后定义与实际相关的处理函数,这样才算是一个完整的GUI 程序。
在模块tkinter 中提供了各种各样的常用组件,例如按钮、标签和文本框,这些组件通常也被称为控件或者部件。其中最为主要的组件如下表所示。
组件名称 | 描述 |
---|---|
Button | 按钮控件,用于在程序中显示按钮 |
Canvas | 画布控件,用于显示图形元素,如线条或文本 |
Checkbutton | 多选框控件,用于在程序中提供多项选择框 |
Entry | 输入控件,用于显示简单的文本内容 |
Frame | 框架控件,用于在屏幕上显示一个矩形区域,多用来作为容器 |
Label | 标签控件,用于显示文本和位图 |
Listbox | 列表框控件,用于显示一个字符串列表给用户 |
Menubutton | 菜单按钮控件,用于显示菜单项 |
Menu | 菜单控件,用于显示菜单栏、下拉菜单和弹出菜单 |
Message | 消息控件,用来显示多行文本,与标签类似 |
Radiobutton | 单选按钮控件,用于显示一个单选按钮的状态 |
Scale | 范围控件,用于显示一个数值刻度,表示输出的范围 |
Scrollbar | 滚动条控件,当内容超过可视化区域时使用,如列表框 |
Text | 文本控件,用于显示多行文本 |
Toplevel | 容器控件,用来提供一个单独的对话框,与Frame类似 |
Spinbox | 微调框控件,与Entry类似,但是可以指定输入范围值 |
PanedWindow | 管理窗口布局控件,可以包含一个或者多个子控件 |
LabelFrame | 简单的容器控件,常用于复杂的窗口布局 |
messagebox | 用于显示应用程序的消息框 |
在模块tkinter的组件中提供了对应的属性和方法,其中标准属性是所有控件所拥有的共同属性,例如大小、字体和颜色。模块tkinter中的标准属性如下表所示。
属性 | 描述 |
---|---|
Dimension | 控件大小 |
Color | 控件颜色 |
Font | 控件字体 |
Anchor | 锚点 |
Relief | 控件样式 |
Bitmap | 位图 |
Cursor | 光标 |
在模块tkinter 中,控件有特定的几何状态管理方法,管理整个控件区域组织,其中tkinter控件公开的几何管理类有包、网格和位置。具体如下表所示。
几何方法 | 描述 |
---|---|
pack() | 包装 |
grid() | 网格 |
place() | 位置 |
在下面的实例中,演示了使用 Frame布局窗体界面的过程。
from tkinter import *
root = Tk()
root.title("hello world")
root.geometry('300x200')
Label(root, text='Python', font=('Arial', 20)).pack()
frm = Frame(root)
# 左
frm_L = Frame(frm)
Label(frm_L, text='多媒体', font=('Arial', 15)).pack(side=TOP)
Label(frm_L, text='数据库', font=('Arial', 15)).pack(side=TOP)
frm_L.pack(side=LEFT)
# 右
frm_R = Frame(frm)
Label(frm_R, text='游戏', font=('Arial', 15)).pack(side=TOP)
Label(frm_R, text='爬虫', font=('Arial', 15)).pack(side=TOP)
frm_R.pack(side=RIGHT)
frm.pack()
root.mainloop()
在Tkinter库中有很多GUI控件,主要包括图形化界面中常用的按钮、标签、文本框、菜单、单选框、复选框等,接下来将介绍使用按钮控件的方法。当使用按钮控件tkinter.Button时,通过向它传递属性参数可以控制按钮的属性,例如可以设置按钮上文本的颜色、按钮的颜色、按钮的大小以及按钮的状态等。在 Tkinter库的按钮控件中,常用的属性控制参数如下表所示。
参数名 | 功能 |
---|---|
anchor | 指定按钮上文本的位置 |
background (bg) | 指定按钮的背景色 |
bitmap | 指定按钮上显示的位图 |
borderwidth (bd) | 指定按钮边框的宽度 |
command | 指定按钮消息的回调函数 |
cursor | 指定鼠标移动到按钮上的指针样式 |
font | 指定按钮上文本的字体 |
foreground (fg) | 指定按钮的前景色 |
height | 指定按钮的高度 |
image | 指定按钮上显示的图片 |
state | 指定按钮的状态 |
text | 指定按钮上显示的文本 |
width | 指定按钮的宽度 |
请看下面的实例,功能是是使用tkinter向窗体中添加按钮控件的过程 。
import tkinter #导入tkinter模块
root = tkinter.Tk() #生成一个主窗口对象
button1 = tkinter.Button(root, #创建按钮1
anchor = 'center',#设置文本的对齐方式
text = '江南赴艽野', #设置按钮上显示的文本
width = 30, #设置按钮的宽度
height = 5) #设置按钮的高度
button1.pack() #将按钮添加到窗口中
button2 = tkinter.Button(root, #创建按钮2
text = '收藏', #设置按钮上显示的文本
bg = 'red') #设置按钮的背景色
button2.pack() #将按钮添加到窗口中
button3 = tkinter.Button(root, #创建按钮3
text = '阅读文章', #设置按钮上显示的文本
width = 15, #设置按钮的宽度
height = 2,) #设置按钮的高度
button3.pack() #将按钮添加到窗口中
button4 = tkinter.Button(root, #创建按钮4
text = '关注', #设置按钮上显示的文本
width = 30, #设置按钮的宽度
height = 5, #设置按钮的高度
state = tkinter.DISABLED) #设置按钮为禁用的
button4.pack() #将按钮添加到窗口中
root.mainloop() #进入消息循环
上述实例代码使用不同的属性参数实例化了4个按钮,并分别将这4个按钮添加到了主窗口中。执行后会在主程序窗口中显示出4种不同的按钮,执行效果如下图所示。
在Tkinter库的控件中,文本框控件主要用来实现信息接收和用户的信息输入功能。在 Python 程序中,使用tkinter.Entry与tkinter.Text可以创建单行文本框和多行文本框组件。通过向文本框控件传递属性参数可以设置文本框的背景色、大小、状态等。例如下表所示了tkinter.Entry和tkinter.Text所共有的几个属性控制参数。
参数名 | 功能 |
---|---|
background (bg) | 指定文本框的背景色 |
borderwidth (bd) | 指定文本框边框的宽度 |
font | 指定文本框中文字的字体 |
foreground (fg) | 指定文本框的前景色 |
selectbackground | 指定选定文本的背景色 |
selectforeground | 指定选定文本的前景色 |
show | 指定文本框中显示的字符,如果是星号,则表示文本框为密码框 |
state | 指定文本框的状态 |
width | 指定文本框的宽度 |
下列代码演示了使用Tkinter在窗体中使用文本框控件的过程。
import tkinter #导入Tkinter模块
root = tkinter.Tk() #生成一个主窗口对象
entry1 = tkinter.Entry(root, #创建单行文本框1
show = '*',) #设置显示的文本是星号
entry1.pack() #将文本框添加到窗口中
entry2 = tkinter.Entry(root, #创建单行文本框2
show = '#', #设置显示的文本是井号
width = 50) #设置文本框的宽度
entry2.pack() #将文本框添加到窗口中
entry3 = tkinter.Entry(root, #创建单行文本框3
bg = 'red', #设置文本框的背景色
fg = 'blue') #设置文本框的前景色
entry3.pack() #将文本框添加到窗口中
entry4 = tkinter.Entry(root, #创建单行文本框4
selectbackground = 'red', #设置选中文本的背景色
selectforeground = 'gray') #设置选中文本的前景色
entry4.pack() #将文本框添加到窗口中
entry5 = tkinter.Entry(root, #创建单行文本框5
state = tkinter.DISABLED) #禁用文本框
entry5.pack() #将文本框添加到窗口中
edit1 = tkinter.Text(root, #创建多行文本框
selectbackground = 'red', #设置选中文本的背景色
selectforeground = 'gray')
edit1.pack() #将文本框添加到窗口中
root.mainloop() #进入消息循环
上述实例代码使用不同的属性参数实例化了6种文本框,执行后的效果如下图所示。
在Tkinter库的控件中,使用菜单控件的方式与使用其他控件的方式有所不同。在创建菜单控件时,需要使用创建主窗口的config()方法将菜单添加到窗口中。例如下面的代码演示了使用Tkinter在窗体中使用菜单控件的过程。
import tkinter
root = tkinter.Tk()
menu = tkinter.Menu(root)
submenu = tkinter.Menu(menu, tearoff=0)
submenu.add_command(label="打开")
submenu.add_command(label="保存")
submenu.add_command(label="关闭")
menu.add_cascade(label="文件", menu=submenu)
submenu = tkinter.Menu(menu, tearoff=0)
submenu.add_command(label="复制")
submenu.add_command(label="粘贴")
submenu.add_separator()
submenu.add_command(label="剪切")
menu.add_cascade(label="编辑", menu=submenu)
submenu = tkinter.Menu(menu, tearoff=0)
submenu.add_command(label="关于")
menu.add_cascade(label="帮助", menu=submenu)
root.config(menu=menu)
root.mainloop()
在上述实例代码中,在主窗口中加入了3个主菜单,而在每个主菜单下又创建了对应的子菜单。其中在主窗口中显示了3个主菜单(文件、编辑、帮助),而在“文件”主菜单下设置了3个子菜单(打开、保存、关闭)。在第二个菜单“编辑”中,通过代码“submenu.add_separator()”添加了一条分割线。执行代码后的效果如下图所示。
在Python程序中,标签控件的功能是在窗口中显示文本或图片。在Tkinter库的控件中,使用tkinter.Label可以创建标签控件。标签控件常用的属性参数如下表所示。
参数名 | 功能 |
---|---|
anchor | 指定标签中文本的位置 |
background (bg) | 指定标签的背景色 |
borderwidth (bd) | 指定标签的边框宽度 |
bitmap | 指定标签中的位图 |
font | 指定标签中文本的字体 |
foreground (fg) | 指定标签的前景色 |
height | 指定标签的高度 |
image | 指定标签中的图片 |
justify | 指定标签中多行文本的对齐方式 |
text | 指定标签中的文本,可以使用“\n”表示换行 |
width | 指定标签的宽度 |
下列代码演示了使用Tkinter在窗体中创建标签的过程。
import tkinter #导入tkinter模块
root = tkinter.Tk() #生成一个主窗口对象
label1 = tkinter.Label(root, #创建标签1
anchor = 'center', #设置标签文本的位置
bg = 'red', #设置标签的背景色
fg = 'blue', #设置标签的前景色
text = 'Python', #设置标签中显示的文本
width = 40, #设置标签的宽度
height = 5) #设置标签的高度
label1.pack() #将标签添加到主窗口中
label2 = tkinter.Label(root, #创建标签2
text = 'Python\n与数据库', #设置标签中显示的文本
justify = tkinter.LEFT, #设置多行文本左对齐
width = 40, #设置标签的宽度
height = 5) #设置标签的高度
label2.pack() #将标签添加到主窗口中
label3 = tkinter.Label(root, #创建标签3
text = 'Python\n与爬虫', #设置标签中显示的文本
justify = tkinter.RIGHT, #设置多行文本右对齐
width = 40, #设置标签的宽度
height = 5) #设置标签的高度
label3.pack() #将标签添加到主窗口中
label4 = tkinter.Label(root, #创建标签4
text = 'Python\n与游戏开发', #设置标签中显示的文本
justify = tkinter.CENTER, #设置多行文本居中对齐
width = 40, #设置标签的宽度
height = 5) #设置标签的高度
label4.pack() #将标签添加到主窗口中
root.mainloop() #进入消息循环
在上述实例代码中,在主窗口中创建了4个类型的标签,执行代码后的效果如下图所示:
在Python程序中,在一组单选按钮中只有一个选项被选中,而在复选框中可以同时选择多个选项。在Tkinter库的控件中,使用tkinter.Radiobutton与tkinter.Checkbutton可以分别创建单选按钮和复选框。通过向它传递属性参数的方式可以单独设置单选按钮和复选框的背景色、大小、状态等。单选按钮和复选框控件常用的属性控制参数如下表所示。
参数 | 功能 |
---|---|
anchor | 设置文本位置 |
background (bg) | 设置背景色 |
borderwidth (bd) | 设置边框的宽度 |
bitmap | 设置组件中的位图 |
font | 设置组件中文本的字体 |
foreground (fg) | 设置组件的前景色 |
height | 设置组件的高度 |
image | 设置组件中的图片 |
justify | 设置组件中多行文本的对齐方式 |
text | 设置组件中的文本,可以使用“\n”表示换行 |
value | 设置组件被选中后关联变量的值 |
variable | 设置组件所关联的变量 |
width | 设置组件的宽度 |
在Python程序中,variable是单选按钮和复选框控件中比较重要的属性参数,需要使用tkinter.IntVar或tkinter.StringVar生成通过variable指定的变量。其中tkinter.IntVar可以生成一个整型变量,而tkinter.StringVar可以生成一个字符串变量。当使用tkinter.IntVar或者tkinter.StringVar生成变量后,可以使用set()方法设置变量的初始值。如果这个初始值与组件的value所指定的值相同,则这个组件处于被选中状态。如果其他组件被选中,则变量值将被修改为这个组件value所指定的值。
下列代码演示了在Tkinter窗体中创建单选按钮和复选框的过程。
import tkinter #导入tkinter模块
root = tkinter.Tk() #生成一个主窗口对象
r = tkinter.StringVar() #生成字符串变量
r.set('1') #初始化变量值
radio = tkinter.Radiobutton(root, #创建单选按钮1
variable = r, #单选按钮关联的变量
value = '1', #设置选中单选按钮时的变量值
text = '单选按钮1') #设置单选按钮的显示文本
radio.pack() #将单选按钮1添加到窗口中
radio = tkinter.Radiobutton(root, #创建单选按钮2
variable = r, #单选按钮关联的变量
value = '2', #设置选中单选按钮时的变量值
text = '单选按钮2' ) #设置单选按钮的显示文本
radio.pack() #将单选按钮2添加到窗口中
radio = tkinter.Radiobutton(root, #创建单选按钮3
variable = r, #单选按钮关联的变量
value = '3', #设置选中单选按钮时的变量值
text = '单选按钮3' ) #设置单选按钮的显示文本
radio.pack() #将单选按钮3添加到窗口中
radio = tkinter.Radiobutton(root, #创建单选按钮4
variable = r, #单选按钮关联的变量
value = '4', #设置选中单选按钮时的变量值
text = '单选按钮4' ) #设置单选按钮的显示文本
radio.pack() #将单选按钮4添加到窗口中
c = tkinter.IntVar() #生成整型变量
c.set(1) #变量初始化
check = tkinter.Checkbutton(root, #创建复选按钮
text = '复选按钮', #设置复选按钮的显示文本
variable = c, #复选按钮关联的变量
onvalue = 1, #设置选中复选按钮时的变量值1
offvalue = 2) #设置未选中复选按钮时的变量值2
check.pack() #将复选按钮添加到窗口中
root.mainloop() #进入消息循环
print(r.get()) #调用函数get()输出r
print(c.get()) #调用函数get()输出c
在上述实例代码中,在主窗口中分别创建了一个包含4个选项的单选按钮和一个复选框,其中使用函数StringVar()生成字符串变量,并将生成的字符串用于单选按钮组件。使用函数IntVar()生成整型变量,并将生成的变量用于复选框。执行文件danfu.py后的效果如下图所示。