网站建设文案策划,seo优化基础教程pdf,南京做网站好的公司,一般去哪个网站做写手第一章 初识Tkinter 目录
第一章 初识Tkinter
前言
一、Tkinter 是什么#xff1f;
二、学习内容
1. 第一个 Tkinter 程序
编辑
2 程序说明
二、Tkinter 基本组件
2.1 标签 (Label)
基本参数
外观参数
文本布局参数
状态参数
事件绑定参数
其他参数
编辑…第一章 初识Tkinter 目录
第一章 初识Tkinter
前言
一、Tkinter 是什么
二、学习内容
1. 第一个 Tkinter 程序
编辑
2 程序说明
二、Tkinter 基本组件
2.1 标签 (Label)
基本参数
外观参数
文本布局参数
状态参数
事件绑定参数
其他参数
编辑
2.2 按钮 (Button)
基本参数
外观参数
状态参数
按钮状态变化参数
事件绑定参数
其他参数
2.3 输入框 (Entry)
基本参数
外观参数
状态参数
文本对齐参数
输入限制参数
其他参数
编辑
2.4 文本框 (Text)
基本参数
外观参数
滚动和换行参数
状态参数
文本选择和插入参数
其他参数
编辑
文本操作方法
编辑
三、布局管理器
3.1 pack () 布局
pack () 布局的工作原理
几何控制参数
间距控制参数
对齐控制参数
其他参数
实例1
实例2
编辑
pack () 布局的优缺点
3.2 grid () 布局
grid () 布局的工作原理
网格定位参数
对齐和填充参数
间距控制参数
权重参数控制列 / 行的扩展比例
其他参数
示例1
grid () 布局的优缺点
3.3 place () 布局
place () 布局的工作原理
绝对定位参数
相对定位参数
对齐参数
堆叠顺序参数
示例1
编辑
示例2
编辑
place () 布局的优缺点 总结 前言 在当今数字化的时代图形用户界面GUI已经成为软件不可或缺的一部分。无论是日常使用的办公软件、娱乐应用还是专业的开发工具GUI 都为用户提供了直观、便捷的交互方式。对于 Python 开发者来说Tkinter 是一个理想的入门选择它是 Python 的标准 GUI 库无需额外安装简单易用却又功能强大。 本学习笔记旨在帮助初学者系统地掌握 Tkinter 的基础知识和应用技巧。通过详细的讲解和丰富的案例你将学会如何创建窗口、添加各种界面元素、管理布局、处理用户事件以及开发完整的 GUI 应用程序。从简单的 Hello World 程序到复杂的文件浏览器每一个案例都经过精心设计由浅入深逐步引导你掌握 Tkinter 的核心概念和技术。 特别值得一提的是每个小节都配有代码示例这些示例不仅注解清晰易于理解还具有很强的实用性。你可以直接运行这些代码观察效果也可以在此基础上进行修改和扩展快速实现自己的想法。通过这种实践性的学习方式你将更加高效地掌握 Tkinter 编程技能。
无论你是 Python 编程的新手还是有一定经验的开发者希望通过本学习笔记你能够轻松入门 Tkinter开发出美观、实用的 GUI 应用程序。让我们一起开启这段有趣的编程之旅吧 一、Tkinter 是什么 Tkinter 是 Python 的标准 GUI图形用户界面库它提供了创建窗口、按钮、文本框等各种界面元素的功能。使用 Tkinter 可以快速开发跨平台的桌面应用程序无需额外安装其他库。
二、学习内容
1. 第一个 Tkinter 程序 代码如下示例 import tkinter as tk# 创建主窗口
root tk.Tk()
root.title(第一个Tkinter程序) # 设置窗口标题
root.geometry(300x200) # 设置窗口大小格式为宽度x高度# 创建标签
label tk.Label(root, text欢迎使用Tkinter!, font(Arial, 12))
label.pack(pady20) # 将标签放置在窗口中并设置垂直间距# 创建按钮
button tk.Button(root, text点击我, commandlambda: print(按钮被点击了!))
button.pack(pady10) # 将按钮放置在窗口中并设置垂直间距# 进入主事件循环
root.mainloop() 2 程序说明
这个程序展示了 Tkinter 的基本结构 导入 tkinter 模块创建主窗口tk.Tk()添加界面元素标签、按钮等使用布局管理器如pack()将元素放置在窗口中进入主事件循环mainloop() 二、Tkinter 基本组件
2.1 标签 (Label)
示例1
import tkinter as tkroot tk.Tk()
root.title(Label参数示例)# 创建一个包含多种参数的标签
label tk.Label(root,text这是一个多行文本标签\n支持自动换行和对齐,font(SimHei, 12),fgwhite,bgblue,width30,height5,padx10,pady5,relieftk.RAISED,bd2,anchortk.NW, # 文本左上角对齐justifytk.LEFT, # 左对齐wraplength200, # 200像素后自动换行cursorhand2, # 鼠标悬停时显示手型activebackgroundred, # 鼠标悬停时背景变红disabledforegroundgray # 禁用时文本变灰
)
label.pack(pady20)# 测试状态变化
def toggle_state():label.config(statetk.DISABLED if label[state] tk.NORMAL else tk.NORMAL)tk.Button(root, text切换状态, commandtoggle_state).pack()root.mainloop() 详细的参数介绍
基本参数 master 说明父窗口或容器即该标签所属的窗口或框架。示例root tk.Tk(); label tk.Label(root) text 说明显示的文本内容。示例textHello, Tkinter! textvariable 说明关联一个 StringVar 对象用于动态更新文本。示例 var tk.StringVar()
var.set(动态文本)
label tk.Label(root, textvariablevar)image 说明显示的图像需使用 tk.PhotoImage 或 PIL.ImageTk.PhotoImage。示例 photo tk.PhotoImage(fileimage.png)
label tk.Label(root, imagephoto)compound 说明当同时设置 text 和 image 时指定文本和图像的组合方式。可选值 tk.NONE默认只显示图像tk.TOP文本在图像上方tk.BOTTOM文本在图像下方tk.LEFT文本在图像左侧tk.RIGHT文本在图像右侧tk.CENTER文本覆盖在图像中央 外观参数 font 说明文本字体可指定为元组 (字体名称, 大小, 样式) 或字体对象。示例 font(SimHei, 12, bold) # 黑体12号加粗
fonttk.font.Font(familyArial, size10, slantitalic)fgforeground 说明文本颜色可使用颜色名称如 red或十六进制值如 #FF0000。 bgbackground 说明背景颜色。 width 和 height 说明标签的宽度和高度。单位 若显示文本单位为字符默认。若显示图像单位为像素。 示例width10, height210 个字符宽2 行高 padx 和 pady 说明标签内容与边界的水平 / 垂直间距内边距单位为像素。 relief 说明边框样式。可选值 tk.FLAT平的默认tk.RAISED凸起tk.SUNKEN凹陷tk.GROOVE凹槽tk.RIDGE脊状 bdborderwidth 说明边框宽度单位为像素。 highlightbackground 和 highlightcolor 说明当标签获得焦点时焦点边框的背景色和颜色。 highlightthickness 说明焦点边框的厚度。 文本布局参数 anchor 说明文本在标签内的对齐方式当标签空间大于文本时。可选值 tk.N, tk.NE, tk.E, tk.SE, tk.S, tk.SW, tk.W, tk.NW, tk.CENTER默认 justify 说明多行文本的对齐方式。可选值tk.LEFT左对齐、tk.CENTER居中、tk.RIGHT右对齐。 wraplength 说明文本自动换行的宽度单位为像素。 状态参数 state 说明标签的状态。可选值 tk.NORMAL正常tk.DISABLED禁用文本变灰且不可交互 cursor 说明鼠标悬停在标签上时的光标样式如 hand2 表示手型。 事件绑定参数 takefocus 说明是否可以通过 Tab 键聚焦到该标签。默认False标签通常不参与焦点导航 其他参数 bitmap 说明显示内置位图如 error, hourglass 等但已逐渐被 image 参数取代。 activebackground 和 activeforeground 说明鼠标悬停在标签上时的背景色和文本颜色。 disabledforeground 说明标签禁用时的文本颜色。 示例2
import tkinter as tkroot tk.Tk()
root.title(标签示例)
root.geometry(300x150)# 创建一个标签显示文本
label1 tk.Label(root, text普通文本标签, fgblack, bgwhite)
label1.pack(pady10)# 创建一个带属性的标签
label2 tk.Label(root, text带属性的标签, font(SimHei, 14), # 设置字体和大小fgwhite, # 前景色文本颜色bgblue, # 背景色width20, # 宽度height2) # 高度
label2.pack(pady10)root.mainloop() 代码解释
这段代码创建了两个标签 普通文本标签 使用默认字体和样式前景色为黑色背景色为白色通过pack(pady10)设置了垂直间距 带属性的标签 指定了字体为 SimHei黑体大小为 14文本颜色为白色背景色为蓝色设置了宽度和高度同样通过pack(pady10)设置了垂直间距 扩展这个示例可以考虑以下几点 添加更多属性如anchor文本对齐方式、padx/pady内边距、wraplength文本自动换行宽度等 动态更新标签添加按钮来改变标签的文本或颜色 使用不同的字体和样式尝试不同的字体、大小和粗细 添加图片标签除了文本标签还可以显示图片 2.2 按钮 (Button)
在 Tkinter 中Button 组件用于创建可点击的按钮用户点击后会触发指定的操作
示例1
import tkinter as tkroot tk.Tk()
root.title(Button参数示例)# 创建一个包含多种参数的按钮
button tk.Button(root,text点击或悬停,font(SimHei, 12),fgwhite,bgblue,width15,height2,padx10,pady5,relieftk.RAISED,bd3,cursorhand2,activebackgroundred, # 鼠标悬停时变红activeforegroundyellow, # 鼠标悬停时文本变黄disabledforegroundgray, # 禁用时文本变灰commandlambda: print(按钮被点击)
)
button.pack(pady20)# 测试状态变化
def toggle_state():button.config(statetk.DISABLED if button[state] tk.NORMAL else tk.NORMAL)tk.Button(root, text切换按钮状态, commandtoggle_state).pack()root.mainloop() 以下是Button 类的全部参数及其详细说明
基本参数 master 说明父窗口或容器即该按钮所属的窗口或框架。示例root tk.Tk(); button tk.Button(root) text 说明按钮上显示的文本内容。示例text点击我 textvariable 说明关联一个 StringVar 对象用于动态更新按钮文本。示例 var tk.StringVar()
var.set(动态按钮)
button tk.Button(root, textvariablevar)image 说明按钮上显示的图像需使用 tk.PhotoImage 或 PIL.ImageTk.PhotoImage。示例 photo tk.PhotoImage(filebutton.png)
button tk.Button(root, imagephoto)compound 说明当同时设置 text 和 image 时指定文本和图像的组合方式。可选值 tk.NONE默认只显示图像tk.TOP文本在图像上方tk.BOTTOM文本在图像下方tk.LEFT文本在图像左侧tk.RIGHT文本在图像右侧tk.CENTER文本覆盖在图像中央 command 说明按钮被点击时调用的函数或方法。示例 def on_click():print(按钮被点击)
button tk.Button(root, commandon_click)外观参数 font 说明文本字体可指定为元组 (字体名称, 大小, 样式) 或字体对象。示例 font(SimHei, 12, bold) # 黑体12号加粗fgforeground 说明文本颜色可使用颜色名称如 red或十六进制值如 #FF0000。 bgbackground 说明背景颜色。 width 和 height 说明按钮的宽度和高度。单位 若显示文本单位为字符默认。若显示图像单位为像素。 示例width10, height210 个字符宽2 行高 padx 和 pady 说明按钮内容与边界的水平 / 垂直间距内边距单位为像素。 relief 说明边框样式。可选值 tk.FLAT平的tk.RAISED凸起默认tk.SUNKEN凹陷tk.GROOVE凹槽tk.RIDGE脊状 bdborderwidth 说明边框宽度单位为像素。 highlightbackground 和 highlightcolor 说明当按钮获得焦点时焦点边框的背景色和颜色。 highlightthickness 说明焦点边框的厚度。 状态参数 state 说明按钮的状态。可选值 tk.NORMAL正常可点击tk.DISABLED禁用变灰且不可点击 cursor 说明鼠标悬停在按钮上时的光标样式如 hand2 表示手型。 按钮状态变化参数 activebackground 和 activeforeground 说明鼠标按下或悬停在按钮上时的背景色和文本颜色。 disabledforeground 说明按钮禁用时的文本颜色。 pressed 说明按钮被按下时的状态样式通过 relief 参数控制。 事件绑定参数 takefocus 说明是否可以通过 Tab 键聚焦到该按钮。默认True按钮可通过 Tab 键选中 command 说明按钮被点击时调用的函数或方法。示例 def on_click():print(按钮被点击)
button tk.Button(root, commandon_click)其他参数 bitmap 说明显示内置位图如 error, hourglass 等但已逐渐被 image 参数取代。 overrelief 说明鼠标悬停在按钮上时的边框样式默认与 relief 相同。 repeatdelay 和 repeatinterval 说明当按钮被长按按住不放时重复触发 command 的延迟时间毫秒和间隔时间。示例 # 长按200ms后开始每100ms触发一次command
button tk.Button(root, repeatdelay200, repeatinterval100) 示例2
import tkinter as tkdef say_hello():label.config(textHello, Tkinter!)root tk.Tk()
root.title(按钮示例)
root.geometry(300x200)# 创建标签
label tk.Label(root, text点击按钮打招呼, font(Arial, 12))
label.pack(pady20)# 创建按钮点击时调用say_hello函数
button1 tk.Button(root, text打招呼, commandsay_hello)
button1.pack(pady10)# 创建一个有状态的按钮
button2 tk.Button(root, text禁用按钮, statetk.DISABLED, # 设置按钮状态为禁用bggray)
button2.pack(pady10)root.mainloop()
2.3 输入框 (Entry) 在 Tkinter 中Entry 组件用于创建单行文本输入框用户可以在其中输入和编辑文本。以下是 Entry 类的全部参数及其详细说明
基本参数 master 说明父窗口或容器即该输入框所属的窗口或框架。示例root tk.Tk(); entry tk.Entry(root) width 说明输入框的宽度以字符为单位。示例width20可显示 20 个字符 textvariable 说明关联一个 StringVar 对象用于动态获取或设置输入框的内容。示例 var tk.StringVar()
entry tk.Entry(root, textvariablevar)
var.set(初始文本) # 设置内容
print(var.get()) # 获取内容show 说明指定输入时显示的字符常用于密码输入。示例show*输入的内容会显示为星号 外观参数 font 说明文本字体可指定为元组 (字体名称, 大小, 样式) 或字体对象。示例 font(SimHei, 12) # 黑体12号fgforeground 说明文本颜色可使用颜色名称如 red或十六进制值如 #FF0000。 bgbackground 说明背景颜色。 bdborderwidth 说明边框宽度单位为像素。 relief 说明边框样式。可选值 tk.FLAT平的tk.RAISED凸起tk.SUNKEN凹陷tk.GROOVE凹槽tk.RIDGE脊状 highlightbackground 和 highlightcolor 说明当输入框获得焦点时焦点边框的背景色和颜色。 highlightthickness 说明焦点边框的厚度。 insertbackground 说明光标插入点的颜色。 insertwidth 说明光标插入点的宽度单位为像素。 状态参数 state 说明输入框的状态。可选值 tk.NORMAL正常可编辑tk.DISABLED禁用不可编辑tk.READONLY只读可选择但不可编辑 cursor 说明鼠标悬停在输入框上时的光标样式如 hand2 表示手型。
文本对齐参数 justify 说明文本在输入框内的对齐方式。可选值 tk.LEFT左对齐默认tk.CENTER居中对齐tk.RIGHT右对齐 输入限制参数 validate 说明指定何时验证输入内容。可选值 focus获得或失去焦点时focusin获得焦点时focusout失去焦点时key每次按键时all上述所有情况none不验证默认 validatecommand 说明验证输入的函数需返回 True 或 False。示例 def validate_input(new_text):return new_text.isdigit() # 只允许输入数字vcmd root.register(validate_input) # 注册验证函数
entry tk.Entry(root, validatekey, validatecommand(vcmd, %P))%P 是传递给验证函数的参数表示输入框的新内容。 invalidcommand 说明当验证失败时调用的函数。 其他参数 selectbackground 和 selectforeground 说明选中文本的背景色和前景色。 selectborderwidth 说明选中文本的边框宽度。 takefocus 说明是否可以通过 Tab 键聚焦到该输入框。默认True输入框可通过 Tab 键选中 xscrollcommand 说明关联水平滚动条用于处理文本超出输入框宽度的情况。 案例1
import tkinter as tkroot tk.Tk()
root.title(Entry参数示例)# 创建一个包含多种参数的输入框
entry tk.Entry(root,width30,font(SimHei, 12),fgblack,bgwhite,bd2,relieftk.RIDGE,justifytk.CENTER, # 文本居中对齐insertbackgroundred, # 光标为红色highlightthickness2,highlightcolorblue, # 聚焦时边框变蓝
)
entry.pack(pady20)
entry.insert(0, 请输入文本...) # 设置初始文本# 验证输入只允许输入数字
def validate_input(new_text):return new_text.isdigit() or new_text # 允许为空vcmd root.register(validate_input)
entry_with_validation tk.Entry(root,width30,validatekey,validatecommand(vcmd, %P)
)
entry_with_validation.pack(pady10)
entry_with_validation.insert(0, 只允许输入数字)# 密码输入框
password_entry tk.Entry(root,width30,show* # 显示为星号
)
password_entry.pack(pady10)
password_entry.insert(0, password)# 禁用的输入框
disabled_entry tk.Entry(root,width30,statetk.DISABLED
)
disabled_entry.pack(pady10)
disabled_entry.insert(0, 禁用状态)# 显示输入内容
def show_content():print(f输入内容: {entry.get()})tk.Button(root, text获取内容, commandshow_content).pack(pady10)root.mainloop() 案例2
import tkinter as tkdef show_input():text entry.get() # 获取输入框中的文本label.config(textf你输入的是: {text})root tk.Tk()
root.title(输入框示例)
root.geometry(300x200)# 创建标签
label tk.Label(root, text请输入一些文本, font(Arial, 12))
label.pack(pady10)# 创建输入框
entry tk.Entry(root, width30)
entry.pack(pady10)# 创建按钮点击时显示输入框中的文本
button tk.Button(root, text显示输入, commandshow_input)
button.pack(pady10)root.mainloop() 2.4 文本框 (Text) 在 Tkinter 中Text 组件用于创建多行文本输入区域支持文本编辑、格式化和滚动。以下是 Text 类的全部参数及其详细说明
基本参数 master 说明父窗口或容器即该文本框所属的窗口或框架。示例root tk.Tk(); text tk.Text(root) width 和 height 说明文本框的宽度和高度以字符为单位。示例width40, height1040 个字符宽10 行高 外观参数 font 说明文本字体可指定为元组 (字体名称, 大小, 样式) 或字体对象。示例 font(SimHei, 12) # 黑体12号fgforeground 说明文本颜色可使用颜色名称如 red或十六进制值如 #FF0000。 bgbackground 说明背景颜色。 bdborderwidth 说明边框宽度单位为像素。 relief 说明边框样式。可选值 tk.FLAT平的tk.RAISED凸起tk.SUNKEN凹陷tk.GROOVE凹槽tk.RIDGE脊状 highlightbackground 和 highlightcolor 说明当文本框获得焦点时焦点边框的背景色和颜色。 highlightthickness 说明焦点边框的厚度。 padx 和 pady 说明文本内容与边框的水平 / 垂直间距内边距单位为像素。 滚动和换行参数 wrap 说明文本换行方式。可选值 tk.CHAR按字符自动换行默认tk.WORD按单词自动换行tk.NONE不自动换行需水平滚动 xscrollcommand 和 yscrollcommand 说明关联水平 / 垂直滚动条用于处理文本超出显示区域的情况。示例 scrollbar tk.Scrollbar(root)
text tk.Text(root, yscrollcommandscrollbar.set)
scrollbar.config(commandtext.yview)状态参数 state 说明文本框的状态。可选值 tk.NORMAL正常可编辑tk.DISABLED禁用不可编辑但可显示文本 cursor 说明鼠标悬停在文本框上时的光标样式如 hand2 表示手型。 文本选择和插入参数 selectbackground 和 selectforeground 说明选中文本的背景色和前景色。 selectborderwidth 说明选中文本的边框宽度。 insertbackground 说明光标插入点的颜色。 insertwidth 说明光标插入点的宽度单位为像素。 insertofftime 和 insertontime 说明光标闪烁的关闭时间和开启时间毫秒。 其他参数 undo 说明是否支持撤销 / 重做操作。示例undoTrue启用撤销功能 maxundo 说明最大撤销步数当 undoTrue 时有效。 autoseparators 说明是否自动添加撤销分隔符当 undoTrue 时有效。 takefocus 说明是否可以通过 Tab 键聚焦到该文本框。默认True文本框可通过 Tab 键选中 spacing1, spacing2, spacing3 说明控制文本行间距。参数 spacing1行上方的额外间距像素。spacing2折叠行的额外间距像素。spacing3行下方的额外间距像素。 案例1
import tkinter as tkroot tk.Tk()
root.title(Text参数示例)# 创建一个包含多种参数的文本框
text tk.Text(root,width40,height10,font(SimHei, 12),fgblack,bgwhite,bd2,relieftk.GROOVE,padx5,pady5,wraptk.WORD, # 按单词换行undoTrue, # 支持撤销操作insertbackgroundred, # 红色光标selectbackgroundyellow, # 黄色选中背景
)
text.pack(pady20)# 插入初始文本
text.insert(tk.END, 这是一个多行文本框示例\n支持文本编辑、格式化和滚动。\n你可以尝试输入、删除或选择文本。)# 创建滚动条
scrollbar tk.Scrollbar(root, commandtext.yview)
scrollbar.pack(sidetk.RIGHT, filltk.Y)
text.config(yscrollcommandscrollbar.set)# 按钮功能获取文本内容
def get_text():content text.get(1.0, tk.END) # 获取从第1行第0列到末尾的所有文本print(文本内容)print(content)# 按钮功能清空文本
def clear_text():text.delete(1.0, tk.END) # 删除从第1行第0列到末尾的所有文本# 按钮功能禁用/启用文本框
def toggle_state():if text[state] tk.NORMAL:text.config(statetk.DISABLED)btn_toggle.config(text启用编辑)else:text.config(statetk.NORMAL)btn_toggle.config(text禁用编辑)# 创建按钮
btn_get tk.Button(root, text获取文本, commandget_text)
btn_get.pack(pady5)btn_clear tk.Button(root, text清空文本, commandclear_text)
btn_clear.pack(pady5)btn_toggle tk.Button(root, text禁用编辑, commandtoggle_state)
btn_toggle.pack(pady5)root.mainloop() 文本操作方法
除了参数外Text 组件还提供了丰富的方法来操作文本 插入文本text.insert(position, text) 示例text.insert(1.0, Hello)在第 1 行第 0 列插入文本 删除文本text.delete(start, end) 示例text.delete(1.0, 1.5)删除第 1 行前 5 个字符 获取文本text.get(start, end) 示例text.get(1.0, tk.END)获取所有文本 标记位置text.mark_set(mark_name, position) 示例text.mark_set(insert, 1.0)将光标移到第 1 行第 0 列 添加标签text.tag_add(tag_name, start, end) 示例text.tag_add(highlight, 1.0, 1.5)标记第 1 行前 5 个字符 配置标签样式text.tag_config(tag_name, options) 示例text.tag_config(highlight, backgroundyellow)设置高亮背景 案例2
import tkinter as tkdef show_text():text text_box.get(1.0, tk.END) # 获取文本框中的所有内容label.config(textf你输入的是:\n{text})root tk.Tk()
root.title(文本框示例)
root.geometry(400x300)# 创建标签
label tk.Label(root, text请输入一些文本, font(Arial, 12))
label.pack(pady10)# 创建文本框
text_box tk.Text(root, width40, height10)
text_box.pack(pady10)# 在文本框中插入初始文本
text_box.insert(tk.END, 在这里输入多行文本...)# 创建按钮点击时显示文本框中的文本
button tk.Button(root, text显示文本, commandshow_text)
button.pack(pady10)root.mainloop() 三、布局管理器
Tkinter 提供了三种主要的布局管理器pack()、grid()和place()。
3.1 pack () 布局
pack () 布局的工作原理 按添加顺序排列组件按照 pack() 调用的顺序依次放置。停靠方向通过 side 参数控制组件停靠的方向上、下、左、右。填充和扩展通过 fill 和 expand 参数控制组件如何填充可用空间。间距控制通过 padx, pady, ipadx, ipady 参数调整组件间距。 pack()是最简单的布局管理器它按照添加的顺序将组件放置在父容器中。
在 Tkinter 中pack() 是最简单的布局管理器它按照添加组件的顺序将它们放置在父容器中。以下是 pack() 方法的全部参数及其详细说明
几何控制参数 side 说明指定组件停靠的方向。可选值 tk.TOP顶部默认tk.BOTTOM底部tk.LEFT左侧tk.RIGHT右侧 示例 button.pack(sidetk.LEFT) # 组件靠左排列fill 说明指定组件在分配的空间内如何填充。可选值 tk.NONE不填充默认tk.X水平填充tk.Y垂直填充tk.BOTH水平和垂直填充 示例 label.pack(filltk.X) # 组件水平方向填充可用空间expand 说明是否扩展父容器的额外空间给组件。可选值 False不扩展默认True扩展 示例 frame.pack(expandTrue) # 组件将获得父容器的额外空间间距控制参数 padx 和 pady 说明组件外部的水平 / 垂直间距外边距单位为像素。示例 button.pack(padx10, pady5) # 组件左右各留10px上下各留5pxipadx 和 ipady 说明组件内部的水平 / 垂直间距内边距单位为像素。示例 label.pack(ipadx5, ipady2) # 组件内容与边框左右各留5px上下各留2px对齐控制参数 anchor 说明组件在分配空间内的对齐方式。可选值 方位字符串tk.N, tk.NE, tk.E, tk.SE, tk.S, tk.SW, tk.W, tk.NW, tk.CENTER默认 示例 button.pack(anchortk.NW) # 组件对齐到左上角其他参数 in_ 说明指定将组件放置在哪个父容器的子组件中需是同一父容器的子组件。示例 button.pack(in_frame) # 将按钮放置在frame内部实例1 import tkinter as tkroot tk.Tk()
root.title(Pack布局示例)
root.geometry(400x300)# 示例1side参数演示
frame1 tk.Frame(root, bglightgray, height100)
frame1.pack(filltk.X)tk.Label(frame1, textTOP, bgred).pack(sidetk.TOP)
tk.Label(frame1, textBOTTOM, bggreen).pack(sidetk.BOTTOM)
tk.Label(frame1, textLEFT, bgblue).pack(sidetk.LEFT)
tk.Label(frame1, textRIGHT, bgyellow).pack(sidetk.RIGHT)# 示例2fill和expand参数演示
frame2 tk.Frame(root, bggray, height100)
frame2.pack(filltk.BOTH, expandTrue, pady10)tk.Label(frame2, textfillBOTH, expandTrue, bgcyan).pack(filltk.BOTH, expandTrue, padx20, pady20
)# 示例3anchor参数演示
frame3 tk.Frame(root, bglightgray, height100)
frame3.pack(filltk.X, pady10)tk.Label(frame3, textNW, bgpurple).pack(anchortk.NW)
tk.Label(frame3, textSE, bgorange).pack(anchortk.SE)# 示例4padx/pady和ipadx/ipady参数演示
frame4 tk.Frame(root, bggray, height100)
frame4.pack(filltk.X, pady10)tk.Label(frame4, text外部间距(padx20, pady10), bgpink).pack(padx20, pady10)
tk.Label(frame4, text内部间距(ipadx20, ipady10), bgbrown).pack(ipadx20, ipady10)root.mainloop() 实例2
import tkinter as tkroot tk.Tk()
root.title(pack布局示例)
root.geometry(300x200)# 创建三个按钮使用pack布局
button1 tk.Button(root, text按钮1, bgred)
button1.pack(filltk.X, padx10, pady5) # 水平填充button2 tk.Button(root, text按钮2, bggreen)
button2.pack(filltk.BOTH, expandTrue, padx10, pady5) # 水平和垂直填充并扩展button3 tk.Button(root, text按钮3, bgblue)
button3.pack(sidetk.BOTTOM, filltk.X, padx10, pady5) # 放置在底部并水平填充root.mainloop() pack () 布局的优缺点 优点 简单易用适合快速布局。适合简单的线性排列水平或垂直。与其他布局管理器如 grid()可以混合使用。 缺点 难以实现复杂的网格布局。组件位置依赖于添加顺序修改时可能需要调整多个组件。对于复杂界面布局代码可能变得冗长且难以维护。
3.2 grid () 布局
grid()使用表格形式的网格来放置组件通过指定行和列来确定位置。
grid () 布局的工作原理 网格系统使用 row 和 column 参数将组件放置在对应的单元格中。跨越行列通过 rowspan 和 columnspan 让组件占据多个单元格。对齐方式使用 sticky 参数控制组件在单元格内的对齐和填充方式。扩展比例通过 weight 参数设置列 / 行在窗口调整大小时的扩展比例。 在 Tkinter 中grid() 是一种强大的布局管理器它使用网格系统行和列来排列组件。以下是 grid() 方法的全部参数及其详细说明
网格定位参数 row 和 column 说明指定组件放置的行和列从 0 开始计数。示例 label tk.Label(root, text姓名)
label.grid(row0, column0) # 放置在第1行第1列rowspan 和 columnspan 说明指定组件跨越的行数和列数。示例 button tk.Button(root, text提交)
button.grid(row2, column0, columnspan2) # 跨越2列对齐和填充参数 sticky 说明控制组件在网格单元格内的对齐方式和填充方式。可选值 方位字符串组合tk.N, tk.S, tk.E, tk.W或其组合如 nsew。 示例 # 组件在单元格内水平和垂直方向都填充
entry.grid(row0, column1, stickynsew)# 组件靠右对齐
button.grid(row1, column1, stickye)间距控制参数 padx 和 pady 说明组件外部的水平 / 垂直间距外边距单位为像素。示例 label.grid(row0, column0, padx5, pady5) # 组件四周各留5px间距ipadx 和 ipady 说明组件内部的水平 / 垂直间距内边距单位为像素。示例 button.grid(row1, column0, ipadx10, ipady5) # 组件内容与边框的间距权重参数控制列 / 行的扩展比例 weight通过父容器的 grid_rowconfigure() 和 grid_columnconfigure() 设置 说明指定当窗口调整大小时列 / 行的扩展比例。示例 # 第0列在窗口扩展时获得2倍的空间
root.grid_columnconfigure(0, weight2)# 第1列在窗口扩展时获得1倍的空间
root.grid_columnconfigure(1, weight1)其他参数 in_ 说明指定将组件放置在哪个父容器的子组件中需是同一父容器的子组件。示例 button.grid(in_frame, row0, column0) # 将按钮放置在frame内部 示例1
import tkinter as tkroot tk.Tk()
root.title(Grid布局示例)
root.geometry(400x300)# 配置列权重使第1列和第2列在窗口扩展时按比例扩展
root.grid_columnconfigure(0, weight1)
root.grid_columnconfigure(1, weight2)# 配置行权重使第2行在窗口扩展时获得更多空间
root.grid_rowconfigure(2, weight1)# 创建并放置组件
tk.Label(root, text用户名:, bglightblue).grid(row0, column0, stickye, padx5, pady5
)
tk.Entry(root).grid(row0, column1, stickyew, padx5, pady5
)tk.Label(root, text密码:, bglightblue).grid(row1, column0, stickye, padx5, pady5
)
tk.Entry(root, show*).grid(row1, column1, stickyew, padx5, pady5
)# 跨越两列的按钮
tk.Button(root, text登录, bggreen, fgwhite).grid(row2, column0, columnspan2, stickynsew, padx5, pady5
)# 创建一个跨越多行多列的文本框
tk.Text(root).grid(row3, column0, columnspan2, rowspan2,stickynsew, padx5, pady5
)root.mainloop() 示例2
import tkinter as tkroot tk.Tk()
root.title(grid布局示例)
root.geometry(300x200)# 创建标签和输入框使用grid布局
tk.Label(root, text用户名:).grid(row0, column0, stickytk.W, padx10, pady10)
tk.Entry(root).grid(row0, column1, padx10, pady10)tk.Label(root, text密码:).grid(row1, column0, stickytk.W, padx10, pady10)
tk.Entry(root, show*).grid(row1, column1, padx10, pady10)# 创建按钮
tk.Button(root, text登录).grid(row2, column0, stickytk.E, padx10, pady10)
tk.Button(root, text取消).grid(row2, column1, stickytk.W, padx10, pady10)root.mainloop() grid () 布局的优缺点 优点 适合创建表格状的布局如表单、计算器等。可以精确控制组件的位置和大小。支持窗口调整大小时的自适应扩展。 缺点 比 pack() 更复杂需要考虑行列关系。若行列配置不当可能导致布局混乱。不适合极复杂的嵌套布局此时可考虑使用 frame 结合 grid()。 3.3 place () 布局
place()通过指定精确的坐标来放置组件不推荐在复杂界面中使用。
place () 布局的工作原理 绝对定位通过 x, y, width, height 直接指定组件的位置和大小。相对定位通过 relx, rely, relwidth, relheight 指定组件相对于父容器的比例位置和大小。混合定位可以同时使用绝对和相对参数如 x50, relwidth0.5。对齐方式使用 anchor 参数调整组件的对齐点。 在 Tkinter 中place() 是一种精确的布局管理器允许你通过指定绝对坐标或相对位置来放置组件。以下是 place() 方法的全部参数及其详细说明
绝对定位参数 x 和 y 说明组件左上角相对于父容器的绝对坐标单位像素。示例 label tk.Label(root, text固定位置)
label.place(x50, y100) # 距离父容器左边缘50px上边缘100pxwidth 和 height 说明组件的绝对宽度和高度单位像素。示例 button tk.Button(root, text固定大小)
button.place(x20, y20, width100, height30) # 宽100px高30px相对定位参数 relx 和 rely 说明组件左上角相对于父容器的相对坐标范围0.0~1.0。示例 # 组件位于父容器水平方向50%、垂直方向30%的位置
label.place(relx0.5, rely0.3)relwidth 和 relheight 说明组件相对于父容器的相对宽度和高度范围0.0~1.0。示例 # 组件宽度为父容器宽度的50%高度为父容器高度的20%
frame.place(relx0.1, rely0.1, relwidth0.5, relheight0.2)对齐参数 anchor 说明指定组件的哪个点与 x, y 或 relx, rely 所指定的位置对齐。可选值 方位字符串tk.N, tk.NE, tk.E, tk.SE, tk.S, tk.SW, tk.W, tk.NW, tk.CENTER默认。 示例 # 组件右上角与坐标(100, 50)对齐
button.place(x100, y50, anchortk.NE)堆叠顺序参数 bordermode 说明指定坐标计算时是否包含父容器的边框。可选值 tk.INSIDE默认坐标从父容器内边缘开始计算tk.OUTSIDE坐标从父容器外边缘开始计算 示例 label.place(x10, y10, bordermodetk.INSIDE)in_ 说明指定将组件放置在哪个父容器的子组件中需是同一父容器的子组件。示例 button.place(in_frame, x5, y5) # 将按钮放置在frame内部 示例1
import tkinter as tkroot tk.Tk()
root.title(Place布局示例)
root.geometry(400x300)# 示例1绝对定位
tk.Label(root, text绝对定位, bgred).place(x20, y20, width100, height30)# 示例2相对定位
tk.Label(root, text相对定位, bggreen).place(relx0.5, rely0.2, relwidth0.3, relheight0.1, anchortk.CENTER
)# 示例3混合定位
tk.Label(root, text混合定位, bgblue).place(x50, rely0.5, width120, relheight0.2
)# 示例4使用anchor参数
tk.Button(root, textNW).place(x100, y100, anchortk.NW)
tk.Button(root, textSE).place(x100, y100, anchortk.SE)# 示例5相对父容器大小动态调整
frame tk.Frame(root, bggray)
frame.place(relx0.1, rely0.6, relwidth0.8, relheight0.3)tk.Label(frame, text动态调整大小, bgyellow).place(relx0.1, rely0.1, relwidth0.8, relheight0.8
)root.mainloop() 示例2
import tkinter as tkroot tk.Tk()
root.title(place布局示例)
root.geometry(300x200)# 创建几个标签使用place布局
tk.Label(root, text标签1, bgred).place(x50, y30, width100, height30)
tk.Label(root, text标签2, bggreen).place(x120, y70, width100, height30)
tk.Label(root, text标签3, bgblue).place(x80, y120, width100, height30)root.mainloop() place () 布局的优缺点 优点 精确控制组件的位置和大小。适合创建固定尺寸的界面如游戏、图形编辑器。当窗口调整大小时组件不会自动调整位置适合需要固定布局的场景。 缺点 不支持窗口自适应窗口调整大小时组件位置不会自动更新。布局代码复杂尤其是在处理多个组件时。若父容器大小改变可能导致组件重叠或布局混乱。 总结 前三章介绍了 Tkinter 的基础概念、常用组件以及三种布局管理器。学会了如何创建简单的 GUI 应用配置各种组件的属性以及使用不同的布局方式来组织界面。这些知识是进一步开发复杂 GUI 应用的基础。