Python GUI编程(Tkinter框架)

1|0 1.Tkinter是什么?

Tkinter是Python的标准GUI(图形用户界面)库,它是Python的Tcl/Tk GUI工具包的包装器。Tkinter允许Python程序员快速创建GUI应用程序,而无需深入了解底层的图形绘制细节。

2|02.安装Tkinter

Tkinter通常已经预装在Python中,所以不需要额外安装。你可以在Python环境中直接导入它:

Import tkinter as tk

不过,在某些 Linux 发行版中,可能需要安装单独的 Tk 开发包。例如在 Ubuntu 系统中,可以使用以下命令安装:

sudo apt - get install python3 - tk

3|03.基础概念

首先,了解Tkinter的基本概念,包括窗口(Window)、组件(Widgets)、事件(Events)和布局管理器(Layout Managers)。

3|1主窗口

在Tkinter中,所有的组件和控件都是从主窗口派生的。主窗口是应用程序的最顶层窗口,所有的其他窗口和控件都是这个窗口的子元素。

import tkinter as tk root = tk.Tk() # 创建主窗口

3|2组件

组件是Tkinter中用于构建用户界面的基本元素,比如按钮(Button)、标签(Label)、文本框(Entry)等。每个组件都是tkinter.Widget类的一个实例。(注:tkinter.Widget 是 Tkinter 库中的一个基类,它是所有 Tkinter 控件(组件)的父类。在 Tkinter 中,几乎所有的 GUI 控件都是 Widget 类的子类。Widget 类提供了所有控件共有的基本属性和方法,比如配置控件的属性、绑定事件等。)

label = tk.Label(root, text="Hello, Tkinter!") # 创建一个标签组件

3|3事件

事件是用户与界面交互的结果,比如点击按钮、移动鼠标、按下键盘等。Tkinter允许你为这些事件编写回调函数,当事件发生时,这些函数会被调用。

def on_button_click(): print("按钮被点击了!") button = tk.Button(root, text="点击我", command=on_button_click) # 按钮点击事件

3|4布局管理器

Tkinter提供了几种布局管理器,用于自动管理组件的位置和大小。主要有三种布局管理器:

pack():最简单的布局管理器,按照组件添加的顺序进行排列。

grid():允许你以表格的形式放置组件,指定行和列。

place():允许你精确指定组件的位置(x, y坐标)。

# 使用pack布局管理器 label.pack() # 使用grid布局管理器 label.grid(row=0, column=0) # 使用place布局管理器 label.place(x=10, y=10)

4|04.创建第一个窗口

#创建一个简单的Tkinter窗口 import tkinter as tk # 创建主窗口 root = tk.Tk() root.title("我的第一个Tkinter窗口") # 运行主循环 root.mainloop()

5|05.添加组件

import tkinter as tk root = tk.Tk() root.title("Tkinter组件") # 添加一个标签 label = tk.Label(root, text="你好,Tkinter!") # 将标签组件放置在主窗口中 label.pack() # 添加一个按钮 def say_hello(): print("Hello, Tkinter!") button = tk.Button(root, text="点击我", command=say_hello) button.pack() root.mainloop()

附:创建按钮代码解释

#定义函数 on_button_click: def on_button_click(): print("按钮被点击了!") #这一行定义了一个名为 on_button_click 的函数。 #当这个函数被调用时,它会执行 print("按钮被点击了!") 语句 #创建按钮: button = tk.Button(root, text="点击我", command=on_button_click) # 按钮点击事件 #这行代码使用 Tkinter 库创建一个按钮组件。tk.Button 是 Tkinter 中的一个类,用于创建按钮。 #参数 root 是按钮的父组件,这意味着这个按钮将放置在之前创建的主窗口中。 #text="点击我" 设置按钮上显示的文本为“点击我”。 #command=on_button_click 指定当按钮被点击时,调用前面定义的 on_button_click 函数。这就实现了按钮的点击事件处理。

6|06.Tkinter 组件介绍

Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。

6|1Tkinter控件表(表格来源:Python GUI 编程(Tkinter) | 菜鸟教程)

控件描述
Button按钮控件;在程序中显示按钮。
Canvas画布控件;显示图形元素如线条或文本
Checkbutton多选框控件;用于在程序中提供多项选择框
Entry输入控件;用于显示简单的文本内容
Frame框架控件;在屏幕上显示一个矩形区域,多用来作为容器
Label标签控件;可以显示文本和位图
Listbox列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户
Menubutton菜单按钮控件,用于显示菜单项。
Menu菜单控件;显示菜单栏,下拉菜单和弹出菜单
Message消息控件;用来显示多行文本,与label比较类似
Radiobutton单选按钮控件;显示一个单选的按钮状态
Scale范围控件;显示一个数值刻度,为输出限定范围的数字区间
Scrollbar滚动条控件,当内容超过可视化区域时使用,如列表框。.
Text文本控件;用于显示多行文本
Toplevel容器控件;用来提供一个单独的对话框,和Frame比较类似
Spinbox输入控件;与Entry类似,但是可以指定输入范围值
PanedWindowPanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。
LabelFramelabelframe 是一个简单的容器控件。常用于复杂的窗口布局。
tkMessageBox用于显示你应用程序的消息框。

6|2Button(按钮)

功能:按钮是一种可交互组件,用户点击按钮时能触发指定的操作,常用于执行特定功能,比如提交表单、确认操作等。

import tkinter as tk def button_click(): print("按钮被点击啦!") root = tk.Tk() # 创建一个按钮组件,文本为'点击我',点击时执行button_click函数 button = tk.Button(root, text="点击我", command=button_click) button.pack() root.mainloop()

说明:在上述代码中,tk.Button() 用于创建按钮对象。text 参数设定了按钮上显示的文本内容,command 参数则绑定了一个函数(这里是 button_click 函数),意味着当按钮被点击时,就会执行这个绑定的函数。最后通过 button.pack() 将按钮添加到窗口中,利用 pack() 布局管理器按照默认顺序排列组件。

6|3Entry(输入框)

功能:允许用户输入单行文本内容,常用于收集如用户名、简单搜索关键词等简短的用户输入信息。

示例

import tkinter as tk def get_input(): input_text = entry.get() print("用户输入的内容是:", input_text) root = tk.Tk() # 创建一个输入框组件 entry = tk.Entry(root) entry.pack() button = tk.Button(root, text="获取输入", command=get_input) button.pack() root.mainloop()

说明:代码里首先用 tk.Entry() 创建了输入框对象。之后定义了 get_input 函数,在函数中通过 entry.get() 方法来获取用户在输入框里输入的文本内容。添加一个按钮用于触发获取输入内容的操作,同样借助 pack() 布局管理器把输入框和按钮添加到窗口中,方便用户操作与查看。

6|4Text(文本框)

功能:提供一个多行的文本编辑区域,用户可以在其中输入、编辑以及查看较多数量的文本,例如编写文章、记录笔记等场景适用。

示例

import tkinter as tk root = tk.Tk() # 创建一个文本框组件 text_box = tk.Text(root) text_box.pack() root.mainloop()

说明:通过 tk.Text() 创建了文本框对象,随后使用 text_box.pack() 把文本框添加到主窗口 root 中。用户在文本框里能够自由地输入多行文本,并且可以利用文本框自带的一些编辑功能(比如光标移动、选中文本等)进行文本的编辑操作。

6|5Checkbutton(复选框)

功能:让用户能够从多个选项里选择一个或多个选项,常用于需要用户选择多项配置、偏好等情况,每个选项有选中和未选中两种状态。

示例

import tkinter as tk root = tk.Tk() # 创建一个整型变量用于记录复选框状态 var1 = tk.IntVar() # 创建一个复选框组件,文本为'选项1',关联变量var1 check_button1 = tk.Checkbutton(root, text="选项1", variable=var1) check_button1.pack() root.mainloop()

说明:先定义了 tk.IntVar() 类型的变量 var1,用于和复选框关联起来记录其状态(选中时 var1 的值为 1,未选中时为 0)。然后使用 tk.Checkbutton() 创建复选框对象,text 参数设置复选框旁边显示的文本,variable 参数指定关联的变量。最后通过 check_button1.pack() 把复选框添加到窗口中,方便用户进行选择操作。

6|6Radiobutton(单选按钮)

功能:用于在一组互斥的选项中选择唯一的一个选项,比如选择性别、选择一种支付方式等场景下使用。

示例

import tkinter as tk root = tk.Tk() # 创建一个整型变量用于记录被选中的单选按钮的值 var = tk.IntVar() # 创建第一个单选按钮组件,文本为'选项A',关联变量var,值设为1 radio_button1 = tk.Radiobutton(root, text="选项A", variable=var, value=1) radio_button1.pack() # 创建第二个单选按钮组件,文本为'选项B',关联变量var,值设为2 radio_button2 = tk.Radiobutton(root, text="选项B", variable=var, value=2) radio_button2.pack() root.mainloop()

说明:先是创建了 tk.IntVar() 类型的变量 var,同一组的单选按钮都共享这个变量来记录被选中按钮的值。接着用 tk.Radiobutton() 分别创建两个单选按钮对象,对于每个单选按钮,text 参数设置旁边显示的文本,variable 参数关联共享变量 varvalue 参数设定该按钮被选中时赋予变量 var 的值。通过 pack() 布局管理器把单选按钮添加到窗口中,用户只能选择其中一个选项。

6|7Listbox(列表框)

功能:展示一个项目列表,用户可以从中选择一个或多个项目,常用于呈现可供选择的多个数据项,像文件列表、商品列表等。

示例

import tkinter as tk root = tk.Tk() # 创建一个列表框组件 listbox = tk.Listbox(root) items = ["选项1", "选项2", "选项3"] for item in items: # 向列表框中插入各个项目 listbox.insert(tk.END, item) listbox.pack() root.mainloop()

说明:通过 tk.Listbox() 创建列表框对象后,定义了一个包含若干选项的列表 items,接着利用循环和 listbox.insert(tk.END, item) 方法将每个选项依次插入到列表框中,最后使用 listbox.pack() 把列表框添加到窗口中,用户就能从中选择相应的项目了。

6|8Scale(滑块)

功能:用户可以通过拖动滑块来选择一个数值,常用于调节连续变化的参数,例如音量大小、图像亮度等设置场景。

示例

import tkinter as tk root = tk.Tk() # 创建一个水平方向的滑块组件,取值范围从0到100 scale = tk.Scale(root, from_=0, to=100, orient=tk.HORIZONTAL) scale.pack() root.mainloop()

说明:利用 tk.Scale() 创建滑块对象,from_ 和 to 参数规定了滑块取值的范围,orient 参数指定滑块的方向(这里是 tk.HORIZONTAL 表示水平方向)。之后通过 scale.pack() 把滑块添加到窗口中,用户通过拖动滑块就能获取相应的数值,并且可以在程序中通过 scale.get() 方法获取滑块当前所代表的值。

6|9Spinbox(微调框)

功能:类似带有上下箭头的输入框,用户可以点击箭头或者手动输入来选择一个数值,常应用于选择有限范围内的整数值或者特定的几个字符串值,比如选择年龄范围、选择预设的城市名称等。

示例

import tkinter as tk root = tk.Tk() # 创建一个微调框组件,取值范围从1到10 spinbox = tk.Spinbox(root, from_=1, to=10) spinbox.pack() root.mainloop()

说明:使用 tk.Spinbox() 创建微调框对象,from_ 和 to 参数定义了微调框的取值范围,用户既可以点击上下箭头按一定增量(默认是 1)改变数值,也可以手动输入符合要求的值。最后通过 spinbox.pack() 把微调框添加到窗口中,方便用户进行数值选择操作。

6|10Menu(菜单)

功能:用于创建菜单栏以及下拉菜单,将多个相关的命令集合在一起,方便用户操作,常见于各种软件应用的顶部菜单栏等位置。

示例

import tkinter as tk root = tk.Tk() # 创建菜单栏对象 menu_bar = tk.Menu(root) # 创建文件下拉菜单对象,设置不可分离(tearoff=0) file_menu = tk.Menu(menu_bar, tearoff=0) # 在文件下拉菜单中添加'打开'命令选项 file_menu.add_command(text="打开") # 在文件下拉菜单中添加'保存'命令选项 file_menu.add_command(text="保存") # 将文件下拉菜单添加到菜单栏中,设置下拉菜单标签为'文件' menu_bar.add_cascade(label="文件", menu=file_menu) # 将菜单栏配置到根窗口 root.config(menu=menu_bar) root.mainloop()

说明:首先创建 tk.Menu() 类型的菜单栏对象 menu_bar,接着创建文件下拉菜单对象 file_menu 并设置其不可分离(通过 tearoff=0)。然后利用 add_command() 方法向文件下拉菜单中添加具体的命令选项(如 “打开”、“保存”),再通过 add_cascade() 方法把文件下拉菜单添加到菜单栏里,最后通过 root.config(menu=menu_bar) 将整个菜单栏配置到根窗口 root 上,用户点击菜单栏的标签就能展开下拉菜单并选择相应命令。

6|11Canvas(画布)

功能:提供一个绘图区域,可以在上面绘制各种图形(如直线、矩形、圆形、多边形等),还能用于展示图像、实现简单动画等复杂的可视化操作。

示例

import tkinter as tk root = tk.Tk() # 创建一个宽度为200,高度为200的画布组件 canvas = tk.Canvas(root, width=200, height=200) canvas.pack() # 在画布上绘制一个矩形,指定左上角和右下角坐标 canvas.create_rectangle(50, 50, 150, 150) root.mainloop()

说明:通过 tk.Canvas() 创建画布对象,设定好宽度和高度参数后,利用 canvas.pack() 把画布添加到窗口中。之后使用 canvas.create_rectangle() 这类 create_xxx() 系列方法(这里绘制矩形,不同图形有对应的创建方法)在画布上绘制相应的图形,并且后续还可以通过其他方法(如修改图形属性等)对绘制的图形做进一步操作。

7|07.布局管理

7|1pack 布局

pack() 是一种简单的布局方式。它会按照组件添加的顺序将组件排列在窗口中。可以通过一些参数来调整布局,比如 side 参数可以设置组件排列的方向(topbottomleftright)。

示例:

import tkinter as tk root = tk.Tk() button1 = tk.Button(root, text="按钮1") button1.pack(side = tk.LEFT) button2 = tk.Button(root, text="按钮2") button2.pack(side = tk.LEFT) root.mainloop()

这个例子中,两个按钮会从左到右排列。

7|2grid 布局

grid() 布局是按照表格的形式来排列组件的。通过指定行和列的位置来放置组件。

示例:

import tkinter as tk root = tk.Tk() label1 = tk.Label(root, text="姓名") label1.grid(row = 0, column = 0) entry1 = tk.Entry(root) entry1.grid(row = 0, column = 1) label2 = tk.Label(root, text="年龄") label2.grid(row = 1, column = 0) entry2 = tk.Entry(root) entry2.grid(row = 1, column = 1) root.mainloop()

在这个例子中,通过grid()方法将标签和输入框按照表格的形式排列,形成了一个简单的表单界面。

7|3place 布局

place() 布局可以通过指定组件的绝对位置(xy 坐标)或者相对位置来放置组件。不过这种布局方式不太灵活,当窗口大小改变时,组件的位置可能不会自适应。

示例:

import tkinter as tk root = tk.Tk() button = tk.Button(root, text="一个按钮") button.place(x = 50, y = 50) root.mainloop()

这里的按钮会出现在距离窗口左上角(x=50,y=50)的位置。

8|08.事件处理

除了前面介绍的按钮点击事件,Tkinter 还可以处理很多其他事件,如鼠标移动、键盘按键等。

例如,处理鼠标进入和离开组件的事件:

import tkinter as tk def enter(event): print("鼠标进入组件") def leave(event): print("鼠标离开组件") root = tk.Tk() label = tk.Label(root, text="移动鼠标到这里") label.pack() label.bind("<Enter>", enter) label.bind("<Leave>", leave) root.mainloop()

在这个例子中,通过 bind() 方法将事件和对应的处理函数绑定起来。<Enter> 表示鼠标进入组件的事件,<Leave> 表示鼠标离开组件的事件。当这些事件发生时,会分别执行 enter() 和 leave() 函数。

9|09.结语

学习 Tkinter 需要不断地实践和尝试不同的组件组合、布局方式和事件处理方法,通过编写一些简单的图形界面程序,如计算器、简单的文本编辑器等来加深理解。同时,也可以参考 Tkinter 的官方文档获取更详细的信息。

Python的官方 Tkinter文档:

tkinter — Python interface to Tcl/Tk — Python 3.13.1 documentation


__EOF__

本文作者chunyublog
本文链接https://www.cnblogs.com/chunyublog/p/18659581.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   chunyublog  阅读(53)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示