学习如何使用Tkinter包编写一些图形用户界面程序

发布时间:2026/10/26 9:47:25

学习如何使用Tkinter包编写一些图形用户界面程序 本文我们将学习如何使用Tkinter包编写一些图形用户界面程序。Tkinter是Python的一个标准包因此我们并不需要安装它。我们将从创建一个窗口开始然后我们在其之上加入一些小组件比如按钮复选框等并使用它们的一些属性。话不多说让我们开始吧创建一个窗口首先我们导入Tkinter包然后创建一个窗口最后给这个窗口设置标题。from tkinter import * window Tk() window.title(First Window) window.mainloop()结果如下最后一行我们调用了mainloop函数这个函数将让窗口等待用户与之交互直到我们关闭它。如果忘记调用mainloop函数的话将不会向用户显示任何内容没有窗口。添加一个标签组件为了给之前的例子增加一个标签组件我们可以使用Label类lbl Label(window, textHello)我们可以通过grid函数设置其在窗口的位置lbl.grid(column0, row0)完整代码如下所示from tkinter import * window Tk() window.title(First Window) lbl Label(window, textHello) lbl.grid(column0, row0) window.mainloop()结果如下值得注意的是lbl没有调用grid函数的话是不会显示的。设置标签字体大小我们可以使用font参数设置标签字体大小lbl Label(window, textHello, font(Arial Bold, 50))font参数不光可以在标签组件中用其他组件也可以使用呢可是现在窗口貌似太小了连窗口的标题都看不全如何设置窗口大小呢设置窗口大小我们可以用geometry函数来设置窗口大小window.geometry(350x200)以上代码将会把窗口设置成350个像素宽200个像素高。添加一个按钮组件让我们给窗口增加一个按钮组件它的创建和添加方式和标签组件差不多btn Button(window, textClick Me) btn.grid(column1, row0)完整代码如下所示from tkinter import * window Tk() window.title(First Window) window.geometry(350x200) lbl Label(window, textHello) lbl.grid(column0, row0) btn Button(window, textClick Me) btn.grid(column1, row0) window.mainloop()结果如下更改按钮前景和背景颜色我们可以用fg参数设置按钮或其他组件的前景色。我们可以用bg参数设置按钮或其他组件的背景色。btn Button(window, textClick Me, bgorange, fgred)现在如果点击按钮什么都不会发生因为我们没有写处理点击事件的代码。处理按钮点击事件首先我们编写一个当按钮点击后需要执行的函数def clicked(): lbl.configure(textButton was clicked!)然后我们注明一下点击时要调用的函数btn Button(window, textClick Me, commandclicked)完整代码如下所示from tkinter import * window Tk() window.title(First Window) window.geometry(350x200) lbl Label(window, textHello) lbl.grid(column0, row0) def clicked(): lbl.configure(textButton was clicked!) btn Button(window, textClick Me, commandclicked) btn.grid(column1, row0) window.mainloop()当我们点击按钮后结果如下添加一个文本框在之前的例子中我们了解了如何添加一些简单组件现在我们将通过Tkinter的Entry类获取到用户输入。我们可以这样用Entry类创建一个文本框txt Entry(window, width10)然后可以用grid函数像之前那样添加到窗口中。from tkinter import * window Tk() window.title(First Window) window.geometry(350x200) lbl Label(window, textHello) lbl.grid(column0, row0) txt Entry(window, width10) txt.grid(column1, row0) def clicked(): lbl.configure(textButton was clicked!) btn Button(window, textClick Me, commandclicked) btn.grid(column2, row0) window.mainloop()此时点击按钮标签组件内的内容没有变化如何将文本框中输入的信息在标签组件中显示呢我们可以用get函数获取到文本框中输入的信息然后如下更改clicked函数来设置窗口大小def clicked(): res Welcome to txt.get() lbl.configure(textres)如果我们在文本框中输入信息并点击按钮组件标签组件将会显示Welcome to 文本框输入信息。以下是完整代码from tkinter import * window Tk() window.title(First Window) window.geometry(350x200) lbl Label(window, textHello) lbl.grid(column0, row0) txt Entry(window, width10) txt.grid(column1, row0) def clicked(): res Welcome to txt.get() lbl.configure(textres) btn Button(window, textClick Me, commandclicked) btn.grid(column2, row0) window.mainloop()运行结果为但每次我们运行代码后我们都需要通过点击文本框来设置输入焦点才能输入信息有什么办法可以自动设置输入焦点吗设置输入焦点很简单我们只需要调用focus函数来设置窗口大小txt.focus()当我们运行代码后会发现可以直接在文本框中输入信息而不需要点击文本框。添加一个组合框为了添加一个组合框可以使用Combobox类from tkinter.ttk import * combo Combobox(window)然后可以给组合框添加一些值。from tkinter import * from tkinter.ttk import * window Tk() window.title(First Window) window.geometry(350x200) combo Combobox(window) combo[values] (1,2,3,4,5,Text) combo.current(1) combo.grid(column0, row0) window.mainloop()如上所示我们可以用元组设置组合框选项。我们可以通过传递期望被选中选项的索引给current函数用以设置被选中的选项。我们可以通过get函数获取到被选中的选项。combo.get()添加复选框我们可以用Checkbutton类来创建一个复选框组件chk Checkbutton(window, textChoose)能通过传递值设置复选框的状态from tkinter import * from tkinter.ttk import * window Tk() window.title(First Window) window.geometry(350x200) chk_state BooleanVar() chk_state.set(True) # Set check state chk Checkbutton(window, textChoose, varchk_state) chk.grid(column0, row0) window.mainloop()上例我们用的是BooleanVar变量用来设置复选框的状态也可以使用IntVar变量进行设置。chk_state IntVar() chk_state.set(1) # Check chk_state.set(0) # Uncheck结果和用BooleanVar一样。添加单选框添加单选框可以用Radiobutton类创建一个文本框rad1 Radiobutton(window, textFirst, value1)我们需要给每个单选框设置不同的值否则会不起作用。from tkinter import * from tkinter.ttk import * window Tk() window.title(First Window) window.geometry(350x200) rad1 Radiobutton(window, textFirst, value1) rad2 Radiobutton(window, textSecond, value2) rad3 Radiobutton(window, textThird, value3) rad1.grid(column0, row0) rad2.grid(column1, row0) rad3.grid(column2, row0) window.mainloop()当然我们可以给这些单选框设置command参数指定一个函数当用户点击它们时就会运行该函数。rad1 Radiobutton(window, textFirst, value1, commandclicked) def clicked(): # Do what you need pass获取单选框值为获取到选中单选框的值我们可以将IntVar变量传给单选框的variable参数之后用IntVar变量的get函数就可以获取到其值啦from tkinter import * from tkinter.ttk import * window Tk() window.title(First Window) selected IntVar() lbl Label(window, textShow Value) rad1 Radiobutton(window, textFirst, value1, variableselected) rad2 Radiobutton(window, textSecond, value2, variableselected) rad3 Radiobutton(window, textThird, value3, variableselected) def clicked(): lbl.configure(textselected.get()) btn Button(window, textClick Me, commandclicked) rad1.grid(column0, row0) rad2.grid(column1, row0) rad3.grid(column2, row0) btn.grid(column4, row0) lbl.grid(column0, row1) window.mainloop()每次我们选中一个单选框并点击按钮标签框中就会显示其值添加文本区添加文本区可以用ScrolledText类创建一个文本框from tkinter import scrolledtext txt scrolledtext.ScrolledText(window, width40, height10)我们需要指定一个文本区的宽度和高度否则它会占住整个窗口from tkinter import * from tkinter import scrolledtext window Tk() window.title(First Window) window.geometry(350x200) txt scrolledtext.ScrolledText(window, width40, height10) txt.grid(column0, row0) window.mainloop()用以下方法可以在文本区中插入文本txt.insert(INSERT, Text goes here)用以下方法可以将文本区中的文本删除txt.delete(1.0, END)创建消息框我们可以按如下方式创建一个消息框from tkinter import messagebox messagebox.showinfo(Message title, Message content)我们创建一个按钮当它被点击时显示一个消息框from tkinter import * from tkinter import messagebox window Tk() window.title(First Window) window.geometry(350x200) def clicked(): messagebox.showinfo(Message title, Message content) btn Button(window, textClick here, commandclicked) btn.grid(column0, row0) window.mainloop()添加SpinboxSpinbox是输入控件与Entry类似但是可以指定输入范围值。spin Spinbox(window, from_0, to100)通过from_和to参数指定范围也可以用width参数指定控件宽度。from tkinter import * window Tk() window.title(First Window) window.geometry(350x200) spin Spinbox(window, from_0, to100, width5) spin.grid(column0, row0) window.mainloop()也可以指定某些特定的值而不是整个范围from tkinter import * window Tk() window.title(First Window) window.geometry(350x200) spin Spinbox(window, values(3,8,11), width5) spin.grid(column0, row0) window.mainloop()这样Spinbox控件就只会显示3个数字即3811。可以用如下方式给Spinbox控件设置默认值var IntVar() var.set(36) spin Spinbox(window, from_0, to100, width5, textvariablevar)运行代码就可以看到36作为Spinbox控件的默认值显示了。添加进度条我们可以用Progressbar类创建进度条from tkinter.ttk import Progressbar bar Progressbar(window, length200)设置一下进度条的值bar[value] 70改变进度条的颜色可以按如下步骤进行from tkinter import * from tkinter.ttk import Progressbar from tkinter import ttk window Tk() window.title(First Window) window.geometry(350x200) style ttk.Style() style.theme_use(default) style.configure(black.Horizontal.TProgressbar, backgroundblack) bar Progressbar(window, length200, styleblack.Horizontal.TProgressbar) bar[value] 70 bar.grid(column0, row0) window.mainloop()添加文件对话框我们可以按如下方式创建一个文件对话框from tkinter import filedialog file filedialog.askopenfilename()当你选择一个文件并点击打开file变量将会保存该文件的路径。如果想一次选择多个文件并打开我们可以用files filedialog.askopenfilenames()用filetypes参数指定文件对话框的文件类型只需在元组中指定扩展名即可。file filedialog.askopenfilename(filetypes ((Text files,*.txt),(all files,*.*)))askdirectory函数可以让我们请求目录dir filedialog.askdirectory()可以用initialdir参数指定打开的初始目录from tkinter import * from tkinter import filedialog import os window Tk() window.title(First Window) window.geometry(350x200) def clicked(): file filedialog.askopenfilenames(initialdiros.path.dirname(__file__)) btn Button(window, textClick Me, commandclicked) btn.grid(column0, row0) window.mainloop()
延伸阅读

更多相关文章

2026/10/26 9:47:25

编程语言注释的方式

Python单行注释# 这是一个单行注释多行注释(本质上是跨行字符串) 这是一个多行注释的示例。它可以跨越多行。 """这是一个多行注释的示例。它可以跨越多行。 """C单行注释// 这是一个单行注释多行注释/*这是一个多行注释的…

2026/10/26 9:42:25

STM32寄存器实战:从地址映射到外设操作,彻底看懂芯片底层

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 9:42:25

Arm Compiler 5.06 update 7:Cortex-M嵌入式开发的稳定交付基石

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 11:13:02

S7-1200 PLC+信捷视觉协同控制立体仓库实战程序

简介:本资源为全国职业院校技能大赛‘国赛立体仓库’项目配套PLC程序工程包,面向自动化、机电一体化及智能制造方向的备赛学生、实训教师与工业控制初学者。聚焦PLC逻辑控制、机器人MODBUSTCP通信、信捷视觉系统集成及西门子V90三轴伺服驱动协同控制等核…

2026/10/26 11:13:02

AI认证选择指南:从入门到职业提升

1. AI认证的价值与选择逻辑 刚入行AI领域的新手常会陷入一个误区:认为只要考个证书就能快速获得竞争力。实际上,证书只是学习路径中的里程碑,关键是要选择与个人职业规划匹配的认证体系。目前市面上的AI认证主要分为三类: 学术型…

2026/10/26 11:13:02

Kubernetes为何强制禁用Swap分区?原理与最佳实践

1. 为什么Kubernetes要求禁用交换分区? 第一次接触Kubernetes部署的人都会在官方文档中看到这个硬性要求:必须禁用交换分区(swap)。这个看似简单的配置背后其实有着深刻的系统设计考量。我在生产环境部署Kubernetes集群时&#xf…

2026/10/26 11:13:02

S7-1200立体仓库PLC程序:工业级搬运闭环与信捷视觉通信实战

简介:本资源为全国职业院校技能大赛‘自动化生产线安装与调试’赛项配套的立体仓库PLC控制系统完整工程包,面向工业自动化专业师生、PLC初学者及备赛选手,聚焦多设备协同控制核心难点。资源包含45个文件,涵盖9个XML通信配置文件&a…

2026/10/26 11:13:02

ESP8266/ESP32搭建轻量级DNS服务器实战指南

1. ESP8266/ESP32的隐藏技能:轻量级DNS服务器实战 没想到吧?这块售价不到20元的开发板不仅能联网控制智能家居,还能摇身一变成为局域网内的DNS服务器。我第一次在项目中尝试这个方案时,连自己都觉得不可思议——直到亲眼看到它成功…

2026/10/26 11:08:01

iPad协议859部署包部署与低版本修复补丁排错

简介:这份“ipad协议859部署包低版本修复”面向从事iPad协议wx接口部署、联调与低版本兼容排查的开发者,重点解决低版本扫码登录中验证码非绕过验证及本地接口调试环境搭建问题,适合需要快速复现与验证修复效果的接口测试人员。压缩包共21个文…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/26 0:20:17

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/26 0:00:48

Nested Learning:解决AI灾难性遗忘的分层记忆架构

1. 为什么AI需要"记忆"能力?在传统深度学习模型中,我们常遇到一个根本性问题:模型在处理新任务时,往往会完全遗忘之前学到的知识。这种现象被业界称为"灾难性遗忘"(Catastrophic Forgetting)。想象一下&#…

2026/10/26 0:00:48

企业级大模型应用:OCR预处理、Dify编排与DeepSeek落地实战

1. 这不是“用大模型”,而是重构工作流的起点“大模型的应用和工具”——这八个字现在被贴在无数技术分享、招聘JD、内部立项书的标题栏里,但绝大多数人点进去后看到的,是零散的API调用示例、几个开源UI截图、或者一句“接入LLM就能降本增效”…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑