百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python入门学习教程:第 16 章 图形用户界面(GUI)编程

off999 2025-09-06 10:17 62 浏览 0 评论

16.1 什么是 GUI 编程?

图形用户界面(Graphical User Interface,简称 GUI)是指通过窗口、按钮、菜单、文本框等可视化元素与用户交互的界面。与命令行界面(CLI)相比,GUI 更加直观、易用,是大多数现代应用程序采用的交互方式。

Python 提供了多个 GUI 库,用于开发图形界面应用程序,常见的有:

  • Tkinter:Python 自带的 GUI 库,轻量级、易于学习,适合快速开发简单的 GUI 应用。
  • PyQt:功能强大的跨平台 GUI 库,支持丰富的组件和高级特性,但学习曲线较陡。
  • wxPython:另一款跨平台 GUI 库,API 设计接近原生 GUI,兼容性好。
  • Kivy:专注于移动应用和多点触控的 GUI 库,支持跨平台开发。

本章将重点介绍 Tkinter,因为它是 Python 标准库的一部分,无需额外安装,且足以满足基础 GUI 开发需求。

16.2 Tkinter 简介与环境准备

16.2.1 Tkinter 的特点

Tkinter 是 Python 绑定的 Tk GUI 工具包,具有以下特点:

  • 简单易用:API 设计简洁,入门门槛低。
  • 跨平台:可在 Windows、macOS、Linux 等操作系统上运行,且界面风格与系统保持一致。
  • 轻量级:占用资源少,适合开发小型应用。
  • 功能基本完备:提供常用的 GUI 组件和功能,满足大多数基础应用需求。

16.2.2 环境准备

Tkinter 是 Python 标准库的一部分,因此在安装 Python 时已自动包含,无需额外安装。可以通过以下代码验证 Tkinter 是否可用:

import tkinter as tk

from tkinter import messagebox

# 验证Tkinter是否正常工作

root = tk.Tk()

root.withdraw() # 隐藏主窗口

messagebox.showinfo("验证", "Tkinter环境正常!")

root.destroy()

运行上述代码,如果弹出提示窗口,则说明 Tkinter 可以正常使用。

16.3 Tkinter 基本组件与使用

16.3.1 主窗口创建

使用 Tkinter 开发 GUI 应用的第一步是创建主窗口,通过tk.Tk()函数实现:

import tkinter as tk

# 创建主窗口

root = tk.Tk()

# 设置窗口标题

root.title("我的第一个Tkinter窗口")

# 设置窗口大小(宽x高)

root.geometry("400x300")

# 进入消息循环(事件循环),保持窗口显示

root.mainloop()

运行上述代码,会显示一个标题为 “我的第一个 Tkinter 窗口”、大小为 400x300 的窗口。mainloop()方法用于启动事件循环,使窗口能够响应用户操作(如点击、输入等)。

16.3.2 常用组件

Tkinter 提供了丰富的 GUI 组件,以下是一些常用组件的使用方法:

1. 标签(Label)

标签用于显示文本或图像,不能与用户交互。

import tkinter as tk

root = tk.Tk()

root.title("标签示例")

root.geometry("300x200")

# 创建标签,设置文本、字体、前景色、背景色

label = tk.Label(

root,

text="欢迎使用Tkinter",

font=("SimHei", 12), # 字体为黑体,大小12

fg="blue", # 前景色(文本颜色)

bg="#f0f0f0" # 背景色

)

# 将标签放置到窗口中(pack()方法用于简单布局)

label.pack(pady=20) # pady设置上下边距

root.mainloop()

2. 按钮(Button)

按钮用于触发事件(如点击后执行某个函数)。

import tkinter as tk

from tkinter import messagebox

def on_click():

"""按钮点击事件处理函数"""

messagebox.showinfo("提示", "按钮被点击了!")

root = tk.Tk()

root.title("按钮示例")

root.geometry("300x200")

# 创建按钮,设置文本和点击事件

button = tk.Button(

root,

text="点击我",

command=on_click, # 点击后调用on_click函数

width=10, # 按钮宽度

height=2 # 按钮高度

)

button.pack(pady=20)

root.mainloop()

3. 输入框(Entry)

输入框用于接收用户的单行文本输入。

import tkinter as tk

def get_input():

"""获取输入框内容"""

text = entry.get() # 获取输入框内容

label.config(text=f"你输入的是:{text}") # 更新标签文本

root = tk.Tk()

root.title("输入框示例")

root.geometry("300x200")

# 创建输入框

entry = tk.Entry(root, width=20)

entry.pack(pady=10)

# 创建按钮,点击后获取输入内容

button = tk.Button(root, text="获取输入", command=get_input)

button.pack(pady=5)

# 用于显示结果的标签

label = tk.Label(root, text="")

label.pack(pady=10)

root.mainloop()

4. 文本框(Text)

文本框用于接收或显示多行文本。

import tkinter as tk

def get_text():

"""获取文本框内容"""

# 获取文本框中所有内容(从1.0到end)

text = text_widget.get("1.0", tk.END)

label.config(text=f"文本框内容:{text.strip()}") # strip()去除末尾换行

root = tk.Tk()

root.title("文本框示例")

root.geometry("300x250")

# 创建文本框,设置宽度和高度

text_widget = tk.Text(root, width=30, height=5)

text_widget.pack(pady=10)

# 创建按钮,点击后获取文本框内容

button = tk.Button(root, text="获取文本", command=get_text)

button.pack(pady=5)

# 用于显示结果的标签

label = tk.Label(root, text="")

label.pack(pady=10)

root.mainloop()

5. 复选框(Checkbutton)

复选框用于让用户选择一个或多个选项。

import tkinter as tk

def show_selection():

"""显示选中的选项"""

selected = []

if var1.get() == 1:

selected.append("选项1")

if var2.get() == 1:

selected.append("选项2")

if var3.get() == 1:

selected.append("选项3")

label.config(text=f"你选中了:{', '.join(selected)}")

root = tk.Tk()

root.title("复选框示例")

root.geometry("300x200")

# 用于存储复选框状态的变量(1表示选中,0表示未选中)

var1 = tk.IntVar()

var2 = tk.IntVar()

var3 = tk.IntVar()

# 创建复选框

cb1 = tk.Checkbutton(root, text="选项1", variable=var1, command=show_selection)

cb2 = tk.Checkbutton(root, text="选项2", variable=var2, command=show_selection)

cb3 = tk.Checkbutton(root, text="选项3", variable=var3, command=show_selection)

cb1.pack(anchor=tk.W, padx=20, pady=5) # anchor=tk.W表示左对齐

cb2.pack(anchor=tk.W, padx=20, pady=5)

cb3.pack(anchor=tk.W, padx=20, pady=5)

# 用于显示结果的标签

label = tk.Label(root, text="")

label.pack(pady=10)

root.mainloop()

6. 单选按钮(Radiobutton)

单选按钮用于让用户从多个选项中选择一个。

import tkinter as tk

def show_choice():

"""显示选中的选项"""

label.config(text=f"你选中了:{var.get()}")

root = tk.Tk()

root.title("单选按钮示例")

root.geometry("300x200")

# 用于存储单选按钮选中值的变量

var = tk.StringVar(value="")

# 创建单选按钮(同一组单选按钮需使用相同的variable)

rb1 = tk.Radiobutton(root, text="选项A", variable=var, value="A", command=show_choice)

rb2 = tk.Radiobutton(root, text="选项B", variable=var, value="B", command=show_choice)

rb3 = tk.Radiobutton(root, text="选项C", variable=var, value="C", command=show_choice)

rb1.pack(anchor=tk.W, padx=20, pady=5)

rb2.pack(anchor=tk.W, padx=20, pady=5)

rb3.pack(anchor=tk.W, padx=20, pady=5)

# 用于显示结果的标签

label = tk.Label(root, text="")

label.pack(pady=10)

root.mainloop()

16.4 布局管理器

布局管理器用于控制组件在窗口中的位置和大小,Tkinter 提供了三种常用的布局管理器:pack()、grid()和place()。

16.4.1 pack () 布局

pack()是最简单的布局管理器,它按照组件添加的顺序自动排列(默认从上到下),通过side参数可以指定排列方向(tk.TOP、tk.BOTTOM、tk.LEFT、tk.RIGHT)。

示例:

import tkinter as tk

root = tk.Tk()

root.title("pack()布局示例")

root.geometry("300x200")

# 创建三个按钮,使用pack()布局

btn1 = tk.Button(root, text="按钮1")

btn1.pack(side=tk.TOP, fill=tk.X, padx=10, pady=5) # fill=tk.X表示水平方向填充

btn2 = tk.Button(root, text="按钮2")

btn2.pack(side=tk.TOP, fill=tk.X, padx=10, pady=5)

btn3 = tk.Button(root, text="按钮3")

btn3.pack(side=tk.TOP, fill=tk.X, padx=10, pady=5)

root.mainloop()

16.4.2 grid () 布局

grid()布局将窗口划分为网格(行和列),通过row和column参数指定组件所在的行和列,适合创建规则的布局。

示例:

import tkinter as tk

root = tk.Tk()

root.title("grid()布局示例")

root.geometry("300x200")

# 创建标签和输入框,使用grid()布局

tk.Label(root, text="用户名:").grid(row=0, column=0, padx=5, pady=10, sticky=tk.E)

tk.Entry(root).grid(row=0, column=1, padx=5, pady=10)

tk.Label(root, text="密码:").grid(row=1, column=0, padx=5, pady=5, sticky=tk.E)

tk.Entry(root, show="*").grid(row=1, column=1, padx=5, pady=5) # show="*"用于密码输入

# 按钮跨两列

tk.Button(root, text="登录").grid(row=2, column=0, columnspan=2, pady=10)

root.mainloop()

  • row和column:指定组件所在的行和列(从 0 开始计数)。
  • columnspan和rowspan:指定组件跨越的列数和行数。
  • sticky:指定组件在单元格中的对齐方式(如tk.E表示右对齐,tk.W表示左对齐,tk.N表示上对齐,tk.S表示下对齐)。

16.4.3 place () 布局

place()布局通过指定组件的绝对位置(x和y坐标)或相对位置(relx和rely)来放置组件,灵活性高,但不利于窗口大小调整。

示例:

import tkinter as tk

root = tk.Tk()

root.title("place()布局示例")

root.geometry("300x200")

# 使用绝对位置放置按钮

btn1 = tk.Button(root, text="按钮1")

btn1.place(x=50, y=50, width=80, height=30) # x和y为坐标,width和height为宽高

# 使用相对位置放置按钮(relx和rely为0-1之间的比例)

btn2 = tk.Button(root, text="按钮2")

btn2.place(relx=0.6, rely=0.5, anchor=tk.CENTER) # anchor=tk.CENTER表示以中心为基准

root.mainloop()

16.5 事件处理

在 GUI 应用中,用户的操作(如点击按钮、输入文本、移动鼠标等)称为事件,对事件做出响应的过程称为事件处理。Tkinter 通过bind()方法为组件绑定事件。

16.5.1 常用事件

Tkinter 中的事件以字符串形式表示,常用的事件有:

  • <Button-1>:鼠标左键点击(1 表示左键,2 表示中键,3 表示右键)。
  • <ButtonRelease-1>:鼠标左键释放。
  • <Motion>:鼠标移动。
  • <Enter>:鼠标进入组件。
  • <Leave>:鼠标离开组件。
  • <Key>:键盘按键按下。
  • <Return>:回车键按下。

16.5.2 绑定事件

使用组件.bind(事件, 处理函数)为组件绑定事件,处理函数需要接收一个event参数,包含事件的相关信息(如坐标、按键等)。

示例:

import tkinter as tk

def on_click(event):

"""鼠标点击事件处理函数"""

print(f"鼠标在位置({event.x}, {event.y})被点击")

def on_key(event):

"""键盘事件处理函数"""

print(f"按下的键:{event.keysym}")

root = tk.Tk()

root.title("事件处理示例")

root.geometry("300x200")

# 创建一个标签,绑定鼠标点击事件

label = tk.Label(root, text="点击我或按键盘", bg="#f0f0f0", width=30, height=10)

label.pack(pady=20)

label.bind("<Button-1>", on_click) # 绑定鼠标左键点击事件

# 为窗口绑定键盘事件

root.bind("<Key>", on_key)

root.mainloop()

16.6 示例:简易计算器

使用 Tkinter 开发一个简易的计算器,支持加减乘除运算。

import tkinter as tk

class Calculator:

def __init__(self, root):

self.root = root

self.root.title("简易计算器")

self.root.geometry("300x400")

self.root.resizable(False, False) # 禁止窗口大小调整

# 显示框

self.display_var = tk.StringVar()

self.display = tk.Entry(

root,

textvariable=self.display_var,

font=("SimHei", 20),

justify=tk.RIGHT, # 右对齐

bd=10 # 边框宽度

)

self.display.grid(row=0, column=0, columnspan=4, sticky="nsew")

# 按钮布局

buttons = [

("7", 1, 0), ("8", 1, 1), ("9", 1, 2), ("/", 1, 3),

("4", 2, 0), ("5", 2, 1), ("6", 2, 2), ("*", 2, 3),

("1", 3, 0), ("2", 3, 1), ("3", 3, 2), ("-", 3, 3),

("0", 4, 0), (".", 4, 1), ("=", 4, 2), ("+", 4, 3),

("C", 5, 0), ("←", 5, 1)

]

# 创建按钮

for (text, row, col) in buttons:

btn = tk.Button(

root,

text</doubaocanvas>

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: