整体文章目录
一、 当前章节目录
二、GUI程序开发简介
- 我们使用过大量的客户端程序,这些都属于图形界面程序。
- 构建出了GUI程序的每一个组件,程序的界面就完成了。
- 当为程序需要的每一个事件都添加完相应的回调处理之后,整个GUI程序就完成了。
三、Tkinter及其主要组件
3.1 在程序中使用Tkinter
- 导入Tkinter模块
- 创建一个顶层窗口
- 在顶层窗口的基础上构建所需要的GUI模块和功能
- 将每一个模块与底层程序代码关联起来
- 执行主循环
3.2 顶层窗口
from tkinter import * # 导入tkinter模块
root = Tk() # 使用函数Tk()来创建root对象
root.title("顶层窗口") # 给窗口自定义名称,否则默认显示tk
root.mainloop() # 进入主循环,否则运行时将一闪而过看不到界面
运行结果:
3.3 标签
from tkinter import *
root = Tk()
label = Label(root, text="Hello World") # 定义标签
label.pack() # 调用pack方法
root.mainloop()
运行结果:
3.4 框架
from tkinter import *
root = Tk()
root.title("顶层窗口")
for relief in [RAISED, SUNKEN, FLAT, RIDGE, GROOVE, SOLID]:
f = Frame(root, borderwidth=2, relief=relief) # 定义框架
# 定义标签,并且使用side参数设定排列方式
Label(f, text=relief, width=10).pack(side=LEFT)
# 显示框架,并设定向左排列,x和y轴的宽度均为5个像素
f.pack(side=LEFT, padx=5, pady=5)
root.mainloop()
运行结果:
3.5 按钮
from tkinter import *
root = Tk()
root.title("顶层窗口")
# 使用state参数来设定按钮的状态
Button(root, text="禁用", state=DISABLED).pack(side=LEFT)
Button(root, text="取消").pack(side=LEFT)
Button(root, text="确定").pack(side=LEFT)
Button(root, text="退出", command=root.quit).pack(side=RIGHT) # 绑定了退出的回调
root.mainloop()
运行结果:
3.6 输入框
from tkinter import *
root = Tk()
root.title("顶层窗口")
f1 = Frame(root) # 定义框架
Label(f1, text="标准输入框:").pack(side=LEFT, padx=5, pady=10) # 定义标签
e1 = StringVar() # 定义输入框内容
Entry(f1, width=50, textvariable=e1).pack(side=LEFT) # 基本的输入框
e1.set('输入框默认内容') # 设置一般输入框默认内容
f1.pack()
f2 = Frame(root) # 定义框架
e2 = StringVar()
Label(f2, text='禁用输入框:').pack(side=LEFT, padx=5, pady=10) # 定义标签
Entry(f2, width=50, textvariable=e2, state=DISABLED).pack(side=LEFT) # 禁用的输入框
e2.set('不可修改的内容') # 设置禁用的输入框内容
f2.pack()
root.mainloop()
运行结果:
3.7 单选按钮
from tkinter import *
root = Tk()
root.title("顶层窗口")
foo = IntVar() # 定义对象
for text, value in [('red', 1), ('green', 2), ('black', 3), ('bule', 4), ('yellow', 5)]:
r = Radiobutton(root, text=text, value=value, variable=foo) # 定义r对象
r.pack(anchor=W) # 调用pack方法
foo.set(2) # 设定默认选项
root.mainloop()
运行结果:
3.8 复选按钮
from tkinter import *
root = Tk()
root.title("顶层窗口")
l = [('red', 1), ('green', 2), ('black', 3), ('blue', 4), ('yellow', 5)] # 设定按钮的值
for text, value in l: # 循环遍历l列表的内容
foo = IntVar() # 定义foo对象
c = Checkbutton(root, text=text, variable=foo) # 定义c对象
c.pack(anchor=W) # 调用pack方法
root.mainloop()
运行结果:
from tkinter import *
root = Tk()
root.title("顶层窗口")
l = [('red', 1, NORMAL), ('green', 2, NORMAL), ('black', 3, DISABLED), ('blue', 4, NORMAL),
('yellow', 5, DISABLED)] # 设定按钮的值、状态
for text, value, status in l: # 循环遍历l列表的内容
foo = IntVar()
c = Checkbutton(root, text=text, variable=foo, state=status) # 使用state设定按钮状态
c.pack(anchor=W)
root.mainloop()
运行结果:
3.9 消息
from tkinter import *
root = Tk()
root.title("顶层窗口")
Message(root, text="这是帮助文档!这是帮助文档这是帮助文档这是帮助文档这是帮助文档"
"这是帮助文档这是帮助文档"
"这是帮助文档这是帮助文档这是帮助文档这是帮助文档这是帮助文档这是帮助文档"
"这是帮助文档这是帮助文档"
"这是帮助文档这是帮助文档这是帮助文档这是帮助文档这是帮助文档这是帮助文档"
"这是帮助文档这是帮助文档",
bg='blue', fg='ivory', relief=GROOVE).pack(padx=10, pady=10)
root.mainloop()
运行结果:
3.10 滚动条
from tkinter import *
root = Tk()
root.title("顶层窗口")
l = Listbox(root, height=6, width=15) # 设定一个列表组件,列表组件在下一小节介绍
scroll = Scrollbar(root, command=l.yview) # 定义滚动条,并绑定一个回调
l.configure(yscrollcommand=scroll.set) # 列表关联滚动条
l.pack(side=LEFT) # 列表靠左
scroll.pack(side=RIGHT, fill=Y) # 靠右并充满Y轴的垂直滚动条
for item in range(20): # 循环产生20个数字
l.insert(END, item) # 向列表组件中添加数字
root.mainloop()
运行结果:
3.11 列表框
from tkinter import *
root = Tk()
root.title("顶层窗口")
l = Listbox(root, width=15)
l.pack()
for item in ['apple', 'orange', 'peach', 'banana', 'melon']: # 循环遍历列表元素
l.insert(END, item) # 向列表框中插入列表中的元素
root.mainloop()
运行结果:
四、Tkinter所有组件简介
五、习题
习题:
- 不看书中的示例,自己开发一个下图所示的界面。
- 说出Label和Button的区别。
答案:
- 代码如下。
- Label:标签。用来显示文字或图片
Button:按钮。类似标签,但提供额外的功能,例如鼠标掠过、按下、释放以及键盘操作事件
# 第一题
from tkinter import *
root = Tk()
root.title("顶层窗口")
foo = IntVar() # 定义对象
for text, value in [('red', 1), ('green', 2), ('black', 3), ('bule', 4), ('yellow', 5)]:
r = Radiobutton(root, text=text, value=value, variable=foo) # 定义r对象
r.pack(anchor=W) # 调用pack方法
foo.set(2) # 设定默认选项
root.mainloop()
运行结果: