概述:
项 子项及描述1Tkinter 基础结构
Tk(): 创建主窗口。
mainloop(): 保持窗口运行,监听用户操作
2常用组件及用法标签(Label)、按钮(Button)、输入框(Entry)、文本框(Text)、复选框(Checkbutton)、单选按钮(Radiobutton)3布局管理 (1) pack() - 简单堆叠
(2) grid() - 网格布局
(3) place() - 绝对定位
4事件绑定 (1) 按钮事件
(2) 键盘/鼠标事件
1. Tkinter 基础结构
Tk(): 创建主窗口。
mainloop(): 保持窗口运行,监听用户操作
橙色区域放置组件、功能代码
2. 常用组件及用法
2.1标签(Label)、
text设置标签的文本内容anchor文本或图像在背景内容区的位置,默认为 center,可选值为(n,s,w,e,ne,nw,sw,se,center)eswn 是东南西北英文的首字母,表示:上北下南左西右东。textvariable绑定一个 Tkinter 变量,当变量值改变时,标签文本自动更新wideth字体宽度,wideth="字宽"heigth字体高度,heigth="字高"activebackground设置标签文字的背景色activeforeground设置标签文字的前景色bg标签的背景色fg标签的前景色bd 标签大小,默认为2个像素font标签文本的字体设置,font=('字体',字号)image在标签上显示的图片,插入的图片必须有PhotImage转换格式后才能插入,并且转换的图片格式必须是.gif格式compound设置文本和图片的相对位置,中心、左侧、右侧、顶部或底部1wraplength设置标签文本的换行宽度,标签在达到一定宽度后自动换行padx在x轴方向上的内边距(padding)pady在y轴方向上的内边距(padding)
2.2按钮(Button)
(1)属性
state: 按钮的状态(NORMAL, DISABLED, ACTIVE)。
command: 按钮被点击时执行的函数
其他属性可参考2.1标签
2.3输入框(Entry)
用法:widget = Entry( master, parameter=value, ... )
master:文本框控件的父容器parameter:文本框的参数value:参数对应的值
(1)属性
show: 设置显示字符(如密码输入时显示为 *)
width: 设置文本框的宽度
其他属性可参考2.1标签
(2)方法
get():获取文本框中的内容,如content = entry.get()
insert(index, string):指定位置插入文本,如
entry.insert(0, "默认文本"),从开头位置插入
entry.insert(tk.End, "默认文本"),从末尾插入
entry.insert(‘insert’, "默认文本"),从光标位置插入
delete(first, last=None):删除指定范围内的文本,如
entry.delete(0, tk.END) # 删除所有内容
2.4文本框(Text)
用于显示和编辑多行文本
(1)属性
其他属性可参考2.1标签
(2)方法
insert()方法用于在指定位置插入文本,这个方法的基本格式是insert(index, string),其中index是插入文本的位置,string是要插入的字符串内容,如:
text.insert(END, "欢迎访问apidemos.com\n")——在文本末尾插入
text.insert(INSERT, "apidemos.com")——在当前光标位置插入
tag_config() 方法定义标签的样式,并在插入文本时应用这些标签,如:
text.tag_config("tag_1", background="yellow", foreground="red")
——这个在尝试设置时一直看不出来
window_create() 和 image_create() 方法在 Text 组件中插入按钮或图片:
delete() 方法可以删除 Text 组件中的内容,如text.delete(1.0, "end")
设置只读状态:将 state 选项从 "normal" 改为 "disabled" 可以使 Text 组件内容变为只读。在需要修改内容时,记得将 state 选项改回 "normal"。
get()获取内容,如contents = text.get(1.0, "end")
撤销和恢复:Text 组件支持撤销(undo)和恢复(redo)操作。通过设置 undo 选项为 True 可以开启撤销功能,然后使用 edit_undo() 和 edit_redo() 方法来执行撤销和恢复操作。
索引和标记:Text 组件使用索引(indexes)和标记(marks)来定位文本。索引可以是 "line.column" 格式,也可以是特殊的 "insert"、"current" 或 "end"。标记则是嵌入到文本中的不可见对象,如 "insert" 和 "current",它们可以跟随相应的字符移动。
标签和事件:ext 组件的标签(tags)用于改变文本样式和功能。可以通过 tag_bind() 方法将文本、嵌入的组件和图片与键盘和鼠标事件相关联。例如,以下代码将文本与鼠标事件绑定,并在点击时打开 Python 官网
2.5复选框(Checkbutton)
w = Checkbutton(master, option=value, ...)
master: 按钮的父容器。
options: 可选项,即该按钮的可设置的属性。这些选项可以用键=值的形式设置,并以逗号分隔。
(1)属性
offvalue: 未选中状态的值。
onvalue: 选中状态的值
selectcolor: 选中后的颜色,默认为红色。
selectimage: 选中后的图片。
state: 状态,默认为 NORMAL。
其他属性可参考2.1标签
(2)方法
deselect(): 清除复选框选中选项。
flash(): 在激活状态颜色和正常颜色之间闪烁几次单选按钮,但保持它开始时的状态。
invoke(): 调用此方法来获得与用户单击单选按钮以更改其状态时发生的操作相同的操作。
select(): 设置按钮为选中。
toggle(): 选中与没有选中的选项互相切换。
2.6 单选按钮(Radiobutton)
(1)参数说明
text按钮上显示的文本variable与按钮关联的变量value按钮的值,当按钮被选中时,变量会被设置为这个值command按钮被按下时调用的函数activebackground按钮处于活动状态时的背景色activeforeground按钮处于活动状态时的前景色bg按钮的背景色fg按钮的前景色font按钮文本的字体image按钮上显示的图片
其他属性可参考2.1标签
(4)方法
deselect():取消按钮的选中状态。
flash():刷新按钮,重绘若干次。
invoke():调用按钮的 command 选项指定的函数。
select():将按钮设置为选中状态
收起
当组件变多时,需注意最初设置的窗口大小,否则会显示不出来
3. 布局管理
(1) pack() - 简单堆叠
pace()方法是设置相对位置,即,pace方法自动将按钮放置在其他GUI元素的下方,也可以使用side参数来设置按钮相对于其他GUI元素的位置,如:button.pack(side=TOP);
(2) grid() - 网格布局
grid 方法可以将窗口划分为网格,通过指定按钮所在的行和列,我们可以将按钮放置在网格的任意位置。例如:
button.grid(row=1, column=2)
注意:只用grid()方法设置位置时,不能使用geometry设置窗口大小——感觉像是使用grid()方法会依据实际组件排列情况自动设置窗口大小,row和column从0开始计数
(3) place() - 绝对定位
通过place方法来设置组件在窗口中的绝对位置,如:button.place(x=20,y=5)
4. 事件绑定
(1) 按钮事件
button = tk.Button(root, text="按钮", command=lambda: print("点击"))
(2) 键盘/鼠标事件
def key_press(event):
print(f"按下了 {event.keysym} 键")
root.bind("
5、案例——计算器
使用 Python 编写一个简单的计算器,代码如下:
#描述:设计一个计算器
import tkinter as tk
def calculate():
try:
result = eval(entry.get()) # 计算表达式
entry.delete(0, tk.END) # 清空输入框
entry.insert(tk.END, str(result)) # 显示结果
except Exception:
entry.delete(0, tk.END)
entry.insert(tk.END, "Error")
# 创建主窗口
root = tk.Tk()
root.title("Tkinter 计算器")
# 输入框
entry = tk.Entry(root, width=25, font=("Arial", 14), borderwidth=5)
entry.grid(row=0, column=0, columnspan=4, padx=10, pady=10)
# 按钮布局
buttons = [
'7', '8', '9', '/',
'4', '5', '6', '*',
'1', '2', '3', '-',
'0', 'C', '=', '+'
]
# 动态生成按钮
row = 1
col = 0
for button_text in buttons:
def action(text=button_text): # 闭包传递按钮值
if text == "=":
calculate()
elif text == "C":
entry.delete(0, tk.END)
else:
entry.insert(tk.END, text)
tk.Button(
root,
text=button_text,
width=5,
height=2,
font=("Arial", 12),
command=action
).grid(row=row, column=col, padx=5, pady=5)
col += 1
if col > 3:
col = 0
row += 1
root.mainloop()