Python GUI 新手入门教程:轻松构建图形用户界面

Python 凭借其简单性和多功能性,已经成为最流行的编程语言之一。被广泛应用于从 web 开发到数据科学的各个领域。

在本教程中,我们将探索用于创建图形用户界面(GUIs)的 Python 内置库:

Tkinter:无论你是初学者还是经验丰富的开发人员,了解如何创建 Python GUI 都可以增强你构建交互式应用程序的能力。

Tkinter 是 Python 附带的标准 GUI 工具包。它提供了一组用于创建图形用户界面的工具和小部件。

一、从创建一个简单的 Hello World 开始

让我们从一个基本的例子开始了解 Tkinter。打开你最喜欢的 Python 编辑器(我的是 Pycharm)并创建一个新文件,例如就叫 hello_tkinter.py。编写以下代码:

import tkinter as tkdef say_hello():label.config(text="Hello, Tkinter!")# Create the main window
root = tk.Tk()
root.title("Tkinter Hello World")# Create a label widget
label = tk.Label(root, text="Welcome to Tkinter!")# Pack the label into the main window
label.pack(pady=10)# Create a button widget
button = tk.Button(root, text="Say Hello", command=say_hello)# Pack the button into the main window
button.pack(pady=10)# Start the Tkinter event loop
root.mainloop()

输出

保存文件并运行它,你应该会看到一个带有标签和按钮的窗口,点击该按钮将把标签文本更改为"Hello, Tkinter!":

在这里插入图片描述

在这里插入图片描述

二、Tkinter 基础

现在我们已经创建了一个简单的 Tkinter 应用程序,让我们深入研究一些基本概念和小部件。

2.1 小部件(Widgets)

小部件是 Tkinter GUI 的构建模块。它们可以是按钮、标签、输入字段等等。比如在前面的例子中我们已经使用了 LabelButton 小部件。

输入小部件(Entry Widget)

Entry Widget 允许用户输入一行文本。现在让我们扩展我们的 Hello, Tkinter! 的示例,通过添加一个 Entry Widget 来获取用户名:

import tkinter as tkdef say_hello():name = entry.get()label.config(text=f"Hello, {name}!")# Create the main window
root = tk.Tk()
root.title("Tkinter Hello World")# Create a label widget
label = tk.Label(root, text="Welcome to Tkinter!")# Pack the label into the main window
label.pack(pady=10)# Create a button widget
button = tk.Button(root, text="Say Hello", command=say_hello)# Pack the button into the main window
button.pack(pady=10)# Create an entry widget
entry = tk.Entry(root)# Pack the entry widget into the main window
entry.pack(pady=10)# Start the Tkinter event loop
root.mainloop()

通过这个修改,用户可以在 Entry Widget 中输入他们的名字,点击 Say Hello 按钮将会向他们打招呼。

演示

在这里插入图片描述

在这里插入图片描述

2.2 布局管理(Layout Management)

Tkinter 提供多种几何管理器来组织窗口内的小部件。我们前面使用的 pack() 方法就是其中之一。此外,你还可以使用 grid()place() 进行更复杂的布局。

网格布局(Grid Layout)

你可以使用 grid() 方法创建类似网格的布局。让我们在我们的示例中加入网格布局:

# ...# Pack the label and entry widgets into the main window using the grid layout
label.grid(row=0, column=0, pady=10)
entry.grid(row=1, column=0, pady=10)# ...

注意:不能将 grid()pack() 混合使用,否则运行程序会报如下错误:_tkinter.TclError: cannot use geometry manager grid inside . which already has slaves managed by pack

2.3 事件及事件处理(Events and Event Handling)

在前面的示例中,我们使用 command 参数指定单击按钮时要调用的函数。Tkinter 允许你将函数绑定到各种事件,例如单击按钮、按键或鼠标移动。

让我们在 Entry Widget 中添加一个事件处理程序,以便在用户按下 Enter 键时向用户表示欢迎:

# ...def on_enter(event):say_hello()# Bind the on_enter function to the Enter key press event
entry.bind("<Return>", on_enter)# ...

现在,在 Entry Widget 中按 Enter 将触发 say_hello 函数。

三、中级 Tkinter 概念

前面我们已经了解 Tkinter 的基础知识,现在让我们探索其中更高级的概念吧!

3.1 菜单(Menu)

Tkinter 可以让你为应用程序创建菜单。菜单通常包含 FileEditHelp 等菜单项,并且每个菜单项都可以有子菜单和命令。

# ...def exit_app():root.destroy()# Create a menu bar
menu_bar = tk.Menu(root)
root.config(menu=menu_bar)# Create a File menu
file_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="File", menu=file_menu)# Add an "Exit" command to the File menu
file_menu.add_command(label="Exit", command=exit_app)# ...

现在,运行程序后将会有一个带有 Edit 选项的 File 菜单。点击 Edit 将会关闭应用程序。

3.2 框架(Frames)

框架是用于分组和组织小部件的容器,它们有助于实现更干净、更有组织的布局。

# ...# Create a frame
frame = tk.Frame(root)
frame.pack(pady=10)# Create widgets inside the frame
label_in_frame = tk.Label(frame, text="Inside the Frame")
button_in_frame = tk.Button(frame, text="Click me!")# Pack widgets inside the frame
label_in_frame.pack()
button_in_frame.pack()# ...

在这里,我们创建了一个框架并对其中的小部件进行打包。框架在需要将界面划分为多个部分时特别有用。

3.3 对话框(Dialog Box)

对话框是提示用户输入或提供信息的弹出窗口。Tkinter 提供了一种使用 tkinter.messagebox 模块创建对话框的简单方法。

# ...from tkinter import messageboxdef show_info():messagebox.showinfo("Information", "This is an information message.")# ...# Create a button to show the information dialog
info_button = tk.Button(root, text="Show Info", command=show_info)
info_button.pack(pady=10)# ...

点击 Show Info 按钮将显示一个信息对话框:

在这里插入图片描述

四、高级 Tkinter 特征(Advanced Tkinter Features)

4.1 图片使用(Using Images)

Tkinter 支持各种格式的图像显示,你可以使用 PhotoImage 类来加载和显示图像。

# ...# Load an image
image = tk.PhotoImage(file="path/to/image.png")# Create a label to display the image
image_label = tk.Label(root, image=image)
image_label.pack(pady=10)# ...

用你的图片地址替换“path/to/image.png”即可。但实际测试时发现有的 png 图片可以正常展示,但是有的却不能,会报如下错误:

_tkinter.TclError: couldn't recognize data in image file "images/beutiful_girl.jpg"

网上说 Tkinter 只支持 gif 格式的图片,要加载 png 或 jpg 格式的图片应该用 PIL 包的 Image,同时用 ImageTK.PhotoImage 替换 tk.PhotoImage

from PIL import Image, ImageTk
image = ImageTk.PhotoImage(Image.open("images/beutiful_girl.jpg"))

测试后发现确实可以解决上述报错问题,如果你也遇到同样的错误,可以尝试使用这个解决方法。

4.2 自定义样式(Customizing Styles)

Tkinter 允许你使用样式自定义小部件的外观,你可以为按钮、标签和其他小部件定义样式。

# ...# Create a button with the custom style
styled_button = tk.Button(root, text="Styled Button", foreground="green", font=("Arial", 12))
styled_button.pack(pady=10)# ...

在本例中,我们为按钮创建了自定义样式(绿色文本和指定的字体)。

五、总结(Conclusion)

这个全面的教程涵盖了 Python 内置 GUI 库 Tkinter 的基础和高级功能。从创建一个简单的“Hello, Tkinter!”应用程序来探索菜单、框架和对话框等高级概念,现在你对构建交互式和用户友好的应用程序已经有一个扎实的基础。

记住,实践是掌握 GUI 开发的关键。尝试不同的小部件、布局和样式,为您的 Python 应用程序创建完美的界面。Tkinter 的文档是进一步探索和微调的优秀资源。

完整代码我已整理好,如果需要参考,请关注我,公众号聊天窗口回复关键字”tkinter“即可获取。

如果你觉得这篇文章对你有用,请点赞支持,同时让更多人加入我们一起学习!

技术交流

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

技术交流、资料干货、数据&源码,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、微信搜索公众号:Python学习与数据挖掘,后台回复: tkinter
方式②、添加微信号:dkl88194,备注:来自CSDN +交流

毕设/大作业系列

  • 毕设/大作业:基于Python+Flask+MySQL的豆瓣电影可视化系统
  • 毕设/大作业:搭建基于 Python+Flask+MySQL 的学生培养计划管理系统(附源码)
  • 毕设/大作业:一款基于 Python+flask 的态势感知系统(附完整源码)
  • 毕设/大作业:基于 Python 的 Flask 框架开发的在线电影网站系统(附完整源码)
  • 毕设/大作业:基于 Echarts + Python Flask 动态实时大屏轻松可以实现
  • 毕设/大作业:基于 Python+Django 构建智能互动拍照系统
  • 毕设/大作业:基于 Python+Flask+SQLite 的网易云音乐评论情感分析系统
  • 毕设/大作业:基于 Python 和Surprise库,新手轻松搭建推荐系统
  • 毕设/大作业:基于 Python+Django+MySQL 数据库的租房数据可视化系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/634139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

golang 中使用 statik 将静态资源编译进二进制文件中

现在的很多程序都会提供一个 Dashboard 类似的页面用于查看程序状态并进行一些管理的功能&#xff0c;通常都不会很复杂&#xff0c;但是其中用到的图片和网页的一些静态资源&#xff0c;如果需要用户额外存放在一个目录&#xff0c;也不是很方便&#xff0c;如果能打包进程序发…

Byrdhouse AI实时语音翻译工具,可以在视频通话中翻译100多种语言

你是否曾经在跨国会议或与外国友人聊天时&#xff0c;因为语言不通而感到尴尬或困扰&#xff1f;是不是还在找可以实时翻译的软件或者APP&#xff1f;现在&#xff0c;有了这款语音翻译神器&#xff0c;一切都将变得简单&#xff01; 免费使用链接&#xff1a;https://byrdhous…

Text:焦点切换文字颜色随之改变

按Tab键切换2段文字的焦点&#xff0c;哪段文字的焦点为true&#xff0c;则字体颜色变为红色。 import QtQuickWindow {width: 640height: 480visible: truetitle: qsTr("2.2 属性")Rectangle {Text {id: thislabeltext: qsTr("hello world")font.pixelSiz…

龙芯3A5000上使用腾讯会议

原文链接&#xff1a;龙芯3A5000上使用腾讯会议 hello&#xff0c;大家好啊&#xff01;今天我要给大家介绍的是在龙芯3A5000处理器上安装使用腾讯会议的经验分享。随着远程工作和在线会议的普及&#xff0c;腾讯会议成为了许多人日常工作不可或缺的工具。而对于使用龙芯3A5000…

Open3D 点云转深度图像

目录 一、算法原理1、算法过程2、主要函数二、代码实现三、结果展示1、点云2、深度图像四、测试数据Open3D 点云转深度图像由CSDN点云侠原创。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。<

全网最详细!!Python 爬虫快速入门

1. 背景 最近在工作中有需要使用到爬虫的地方&#xff0c;需要根据 Gitlab Python 实现一套定时爬取数据的工具&#xff0c;所以借此机会&#xff0c;针对 Python 爬虫方面的知识进行了学习&#xff0c;也算 Python 爬虫入门了。 需要了解的知识点&#xff1a; Python 基础语…

Spring Cloud核心组件介绍

三大门派 有Spring Cloud的地方就有江湖&#xff0c;我们就来看一看在这个江湖中都有哪些独霸一方的门派! Netflix 是先有SpringCloud还是先有Netflix?这是一个好问题。Netflix是一家大名鼎鼎的互联网传媒公司&#xff0c;但为什么它在开源软件领域有这么大的名声呢?这就…

如何在 Element Plus 中使用自定义 icon 组件 (非组件库内置icon)

先说原理就是将 svg 文件以 vue 组件文件的方式使用 需求&#xff1a;我想要在 Element Plus 得评分组件中使用自定义得图标。 el-rate v-model"value1" /> 组件本身是支持自定义图标的&#xff0c;但是教程中只说明了如何使用 element-plus/icons-vue 图标库内置…

vue3移动端调用手机摄像头实现扫描二维码功能

vue3移动端调用手机摄像头实现扫描二维码功能 需求&#xff1a; vue3vant4 实现移动端网页调用手机摄像头实现扫描二维码&#xff0c;并返回二维码附带信息功能 效果图&#xff1a; 实现方法 采用vue3-qr-reader插件实现 项目安装依赖&#xff1a; npm install --save vue3-…

慢查询定位

慢查询 使用工具 mysql自带慢日志 默认没有开启需要手动开启 查看慢日志中的文件 总结

第三讲_ArkTS的初识

ArkTS的初识 1. ArkTS的基本组成2. ArkTS自定义组件 1. ArkTS的基本组成 装饰器&#xff1a; 用于装饰类、结构、方法以及变量&#xff0c;并赋予其特殊的含义。自定义组件&#xff1a;可复用的UI单元&#xff0c;可组合其他组件&#xff0c;图示中Component装饰的struct Hello…

路由综合实验-nat

一.要求 R2为ISP路由器&#xff0c;其上只能配置ip地址&#xff0c;不得再进行其他的任何配置 PC1-PC2可以ping通客户平板和DNS服务器; 客户端可以通过域名访问http1&#xff0c;通过地址访问HTTP2 R1为边界路由器&#xff0c;!其上只有一个公有ip地址 拓扑图&#xff1a; 子…

Visual SVN Server实战

文章目录 一、实战概述二、实战步骤&#xff08;一&#xff09;下载Visual SVN Server&#xff08;二&#xff09;安装Visual SVN Server&#xff08;三&#xff09;使用Visual SVN Server1、新建仓库&#xff08;1&#xff09;新建Repository&#xff08;2&#xff09;选择仓库…

eNSP学习——配置通过Telnet登陆系统

实验内容&#xff1a; 模拟公司网络场景。R1是机房的设备&#xff0c;办公区与机房不在同一楼层&#xff0c;R2和R3模拟员工主机&#xff0c; 通过交换机S1与R1相连。 为了方便用户的管理&#xff0c;需要在R1上配置Telnet使员工可以在办公区远程管理机房设备。 为…

批量重命名软件,文件夹批量重命名

有时候为了整理或统一格式&#xff0c;我们需要对多个文件夹进行重命名。传统的重命名方式是一个一个来&#xff0c;既费时又费力。如果你还在用这种方式&#xff0c;那么你真的OUT了&#xff01;现在&#xff0c;有一个强大的工具可以帮你批量重命名多个文件夹&#xff0c;甚至…

匿名/箭头函数,立即执行函数IIFE;函数声明式和函数表达式

目录 匿名/箭头函数&#xff1a;简洁 继承上一层作用域链的this 不绑定arguments,用rest参数 rest 参数&#xff1a;...真正的数组 因为没有function声明&#xff0c;所以没有原型prototype&#xff0c;所以不能作为构造函数 当函数体只有一句时&#xff0c;可省 return ,…

Python常用的自动化小脚本!

一、list转json、string转json 可以使用Python内置的json模块将列表(List)和字符串(String)转换成JSON格式。 List转JSON假设我们有一个列表(List)&#xff1a;my_list [apple, banana, cherry] 我们可以使用json.dumps()函数将该列表转换成JSON格式&#xff1a;import json…

安装JDK: 错误1316.指定的账户已存在

安装JDK&#xff1a; 错误1316.指定的账户已存在 引方案尝试JDK卸载重装JDK注册表清理JDK21JDK1.8 解压版JDK1.8 8u3xx 引 在执行了某个神秘脚本后&#xff0c;我电脑的很多软件就不可用了&#xff0c;怀疑是注册表被动到了&#xff0c;包括java开发必备的JDK&#xff0c;也无…

TortoiseSVN客户端如何安装配置并实现公网访问服务端提交文件到本地服务器

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统&#xff0c;它与Apache Subversion&#xff08;SVN&#xff09;集成在一起&#xff0c;提供了一个用户友好的界面&#xff0c;方便用…

【Docker】在Windows操作系统上安装Docker

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…