Python 图形化界面基础篇:创建工具栏
Python 图形化界面基础篇:创建工具栏
- 引言
- Tkinter 库简介
- 步骤1:导入 Tkinter 模块
- 步骤2:创建 Tkinter 窗口
- 步骤3:创建工具栏
- 步骤4:向工具栏添加工具按钮
- 步骤5:处理工具按钮的点击事件
- 步骤6:启动 Tkinter 主事件循环
- 完整示例代码【代码调整】
- 代码解释
- 结论
引言
在 Python 图形用户界面( GUI )应用程序中,工具栏是一个重要的界面元素,用于提供常用操作的快捷方式。工具栏通常包含图标按钮,每个按钮代表一个特定的操作。在本文中,我们将深入研究如何使用 Python 的 Tkinter 库创建工具栏,并演示如何在应用程序中实现这一功能。
Tkinter 库简介
首先,让我们简要介绍一下 Tkinter 库。 Tkinter 是 Python 标准库中的一个模块,用于创建 GUI 应用程序。它提供了一组工具和组件,用于构建窗口、按钮、标签、文本框等 GUI 元素,并且支持事件处理机制,可以监听和响应用户的交互操作。
步骤1:导入 Tkinter 模块
在开始之前,请确保你的 Python 环境已经安装了 Tkinter 库。然后,在你的 Python 脚本中导入 Tkinter 模块,以便使用 Tkinter 库的功能。
import tkinter as tk
步骤2:创建 Tkinter 窗口
在使用 Tkinter 创建 GUI 应用程序时,首先需要创建一个 Tkinter 窗口对象,通常称之为 root 。这个窗口将充当应用程序的主窗口。
root = tk.Tk()
root.title("创建工具栏示例")
在上面的代码中,我们创建了一个 Tkinter 窗口对象 root ,并设置了窗口的标题为"创建工具栏示例"。
步骤3:创建工具栏
要创建工具栏,我们可以使用 Tkinter 的 ttk (" themed Tkinter ")模块,该模块提供了现代化的 GUI 组件,包括工具栏。首先,我们需要导入 ttk 模块。
from tkinter import ttk
接下来,我们可以创建一个工具栏对象,并将其添加到主窗口。
# 创建工具栏对象
toolbar = ttk.Toolbar(root)
toolbar.pack(side="top", fill="x")
在上述示例中,我们创建了一个工具栏对象 toolbar ,并使用 pack 方法将其添加到主窗口的顶部,并填充整个水平空间。
步骤4:向工具栏添加工具按钮
工具栏的核心部分是工具按钮,每个按钮代表一个操作。我们可以使用 toolbar 对象的 add 方法来添加工具按钮。
以下是一个示例,演示如何向工具栏添加两个工具按钮:“打开"和"保存”。
# 添加工具按钮 - 打开
open_icon = tk.PhotoImage(file="open.png") # 使用图标文件创建图标对象
toolbar.add_command(image=open_icon, command=open_file, compound="left", label="打开") # 添加工具按钮# 添加工具按钮 - 保存
save_icon = tk.PhotoImage(file="save.png") # 使用图标文件创建图标对象
toolbar.add_command(image=save_icon, command=save_file, compound="left", label="保存") # 添加工具按钮
在上述示例中,我们执行以下操作:
-
使用
tk.PhotoImage创建了两个图标对象,分别代表"打开"和"保存"按钮的图标。请确保在当前工作目录下存在这些图标文件。 -
使用
toolbar对象的add_command方法来添加工具按钮。我们指定了图标、点击按钮时要执行的函数、按钮的文本标签和图标位置(" left "表示图标在标签左侧)。 -
可以根据需要添加更多的工具按钮,每个按钮代表一个不同的操作。
步骤5:处理工具按钮的点击事件
要使工具按钮在被点击时执行相应的操作,我们需要定义相应的函数,并将这些函数与工具按钮关联。
以下是一个示例,演示如何定义函数并与工具按钮关联:
# 定义打开文件的函数
def open_file():# 这里可以添加打开文件的操作pass# 定义保存文件的函数
def save_file():# 这里可以添加保存文件的操作pass
在上述示例中,我们定义了两个函数: open_file 和 save_file ,分别用于处理"打开"和"保存"按钮的点击事件。这些函数可以根据需要添加相应的操作。
步骤6:启动 Tkinter 主事件循环
最后一步是启动 Tkinter 的主事件循环,这将使窗口变得可交互,并允许用户使用工具栏执行操作。
root.mainloop()
完整示例代码【代码调整】
下面是一个完整的示例代码,展示了如何创建工具栏并处理工具按钮的点击事件:
import tkinter as tk
from tkinter import ttk# 创建Tkinter窗口
root = tk.Tk()
root.title("创建工具栏示例")# 创建工具栏框架
toolbar_frame = ttk.Frame(root)
toolbar_frame.pack(side="top", fill="x")# 添加工具按钮 - 打开
open_icon = tk.PhotoImage(file="open.png") # 使用图标文件创建图标对象def open_file():# 这里可以添加打开文件的操作passopen_button = ttk.Button(toolbar_frame, image=open_icon, command=open_file, compound="left", text="打开")
open_button.pack(side="left")# 添加工具按钮 - 保存
save_icon = tk.PhotoImage(file="save.png") # 使用图标文件创建图标对象def save_file():# 这里可以添加保存文件的操作passsave_button = ttk.Button(toolbar_frame, image=save_icon, command=save_file, compound="left", text="保存")
save_button.pack(side="left")# 启动Tkinter主事件循环
root.mainloop()
需要提前准备两个图片:

效果图:

代码解释
让我们逐行解释上面的代码:
-
我们导入了 Tkinter 模块和
ttk模块,以便使用 Tkinter 库和工具栏组件。 -
创建了一个 Tkinter 窗口对象
root,并设置了窗口的标题为"创建工具栏示例"。 -
创建了一个工具栏对象
toolbar,并使用pack方法将其添加到主窗口的顶部,并填充整个水平空间。 -
使用
tk.PhotoImage创建了两个图标对象,分别代表"打开"和"保存"按钮的图标。请确保在当前工作目录下存在这些图标文件。 -
使用
toolbar对象的add_command方法来添加工具按钮。我们指定了图标、点击按钮时要执行的函数、按钮的文本标签和图标位置(" left "表示图标在标签左侧)。 -
定义了两个函数:
open_file和save_file,用于处理"打开"和"保存"按钮的点击事件。这些函数可以根据需要添加相应的操作。 -
最后,启动了 Tkinter 的主事件循环,使窗口变得可交互。
结论
在本文中,我们学习了如何使用 Python 的 Tkinter 库创建工具栏,并演示了如何处理工具按钮的点击事件。工具栏是 GUI 应用程序中常见的界面元素,用于提供常用操作的快捷方式。 Tkinter 库提供了丰富的工具和组件,用于构建交互性强大的 GUI 应用程序,满足不同用户的需求。继续学习 Tkinter ,你将能够开发更复杂和有趣的应用程序,提供更好的用户体验。
相关文章:
Python 图形化界面基础篇:创建工具栏
Python 图形化界面基础篇:创建工具栏 引言 Tkinter 库简介步骤1:导入 Tkinter 模块步骤2:创建 Tkinter 窗口步骤3:创建工具栏步骤4:向工具栏添加工具按钮步骤5:处理工具按钮的点击事件步骤6:启动…...
基于matlab实现的卡尔曼滤波匀加速直线运动仿真
完整程序: clear clc %% 初始化参数 delta_t 0.1; %采样时间 T 8; %总运行时长 t 0:delta_t:T; %时间序列 N length(t); %序列的长度 x0 0; %初始位置 u0 0; %初速度 U 10; %控制量、加速度 F [1 delta_t 0 1]; %状态转移矩阵 B …...
windows Visual Studio 2022 opengl开发环境配置
1. 安装glew(GL), GLFW, glm, soil2-debug 还需要premake生成visual studio solution cmake for windows也要安装一个, 但是不用安装MinGW64, bug多 下载源码,找到xxx.sln文件用visual stidio打开solution编译代码,找到xxx.lib, xxx.dll文件…...
中国财政科学研究院党委书记、院长刘尚希一行莅临麒麟信安调研
为贯彻落实省委第十二届四次全会精神,加快推动湖南高质量发展,9月16日下午,由中国财政科学研究院党委书记、院长刘尚希,中国电子信息产业发展研究院总工程师秦海林,省委改革办副主任梁仲,省发展改革委党组成…...
基于element-ui的年份范围选择器
基于element-ui的年份范围选择器 element-ui官方只有日期范围和月份范围选择器,根据需求场景需要,支持年份选择器,原本使用两个分开的年份选择器实现的,但是往往有些是不能接受的。在网上找了很多都没有合适的,所以打…...
【已解决】您所使用的密钥ak有问题,不支持jsapi服务,可以访问该网址了解如何获取有效密钥。
您所使用的密钥ak有问题,不支持jsapi服务,可以访问该网址了解如何获取有效密钥。详情查看:http://lbsyun.baidu.com/apiconsole/key#。 问题 百度密钥过期 思路 注册成为开发者 如果还没注册百度地图api账号的,点击以后就进入…...
JS操作数组方法学习系列(1)
目录 数组添加元素 (push)数组移除末尾元素 (pop)数组添加元素到开头 (unshift)数组移除开头元素 (shift)数组查找元素索引 (indexOf)数组反向查找元素索引 (lastIndexOf)数组切割 (slice)数组连接 (concat)数组元素查找 (find 和 findIndex)数组元素过滤 (filter)数组元素映射…...
翻牌闯关游戏
翻牌闯关游戏 3关:关卡由少至多12格、20格、30格图案:12个玩法:点击两张卡牌,图案一到即可消除掉 记忆时长(毫秒):memoryDurationTime:5000 可配置:默认5000 提示游戏玩法:showTipsFlag:1 可…...
CilckHouse创建表
一、引擎 一开始没注意有引擎选择,要用什么引擎去官方文档看看自己建的表适合什么引擎,大部分用MergeTree 二、用sql语句生成表 1、MergeTree引擎 原文地址:https://blog.csdn.net/qq_21383435/article/details/122812921?ops_request_misc%…...
高级运维学习(八)Ceph 概述与部署
ceph概述 ceph可以实现的存储方式: 块存储:提供像普通硬盘一样的存储,为使用者提供“硬盘”文件系统存储:类似于NFS的共享方式,为使用者提供共享文件夹对象存储:像百度云盘一样,需要使用单独的客…...
【图像处理】VS编译opencv源码,并调用编译生成的库
背景 有些时候我们需要修改opencv相关源码, 这里介绍怎么编译修改并调用修改后的库文件。 步骤 1、下载相关源码工具: 下载opencv4.8源码并解压 https://down.chinaz.com/soft/40730.htm 下载VS2019,社区版免费 https://visualstudio.micro…...
STM32 EtherCAT 总线型(1 拖 4)步进电机解决方案
第 1 章 概述 技术特点 支持标准 100M/s 带宽全双工 EtherCAT 总线网络接口及 CoE 通信协议一 进一出(RJ45 接口),支持多组动态 PDO 分组和对象字典的自动映射,支持站 号 ID 的自动设置与保存,支持 SDO 的…...
Postman应用——测试脚本Test Script
文章目录 Test Script脚本CollectionFolderRequest 解析响应体断言测试 测试脚本可以在Collection、Folder和Request的Pre-request script 和 Test script中编写,测试脚本可以检测请求响应的各个方面,包括正文、状态代码、头、cookie、响应时间等&#x…...
JS的网络状态以及强网弱网详解
文章目录 1. online 和 offline 事件2. navigator.onLine2.1 什么是 navigator.connection?2.2 如何使用 navigator.connection?2.3 总结 1. online 和 offline 事件 online 和 offline 事件是浏览器自带的两个事件,可以通过添加事件监听器来…...
大数据-kafka学习笔记
Kafka Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。 Kafka可以用作Flink应用程序的数据源。Flink可以轻松地从一个或多个Kafka主题中消费数据流。这意味着您可以使用Kafka来捕获和传输…...
详述RPA项目管理流程,RPA项目管理流程是什么?
RPA(Robotic Process Automation,机器人流程自动化)是一种通过软件机器人模拟人类在计算机上执行重复性任务的技术。RPA可以帮助企业提高工作效率、降低成本、减少错误并提高客户满意度。然而,为了确保RPA项目的成功实施ÿ…...
爬虫 — Js 逆向
目录 一、概念1、爬虫2、反爬虫3、加密解密4、加密5、步骤 二、常用加密方式1、加密方式2、常见加密算法3、JS 中常见的算法4、MD5 算法4.1、MD5 加密网站4.2、特点 5、DES/AES 算法6、RSA 算法7、base64 算法 三、环境配置1、node.js 环境配置2、PyCharm 环境配置 一、概念 1…...
Python 网络爬取的时候使用那种框架
尽管现代的网站多采取前后端分离的方式进行开发了,但是对直接 API 的调用我们通常会有 token 的限制和可以调用频率的限制。 因此,在一些特定的网站上,我们可能还是需要使用网络爬虫的方式获得已经返回的 JSON 数据结构,甚至是处理…...
CentOS7安装源设置
此处的安装源地址需要填写:(适用于centos7) http://mirrors.aliyun.com/centos/7/os/x86_64/...
pool = multiprocessing.Pool()报错:module object has no attribute Pool
pool multiprocessing.Pool()报错:module object has no attribute Pool,为什么? 我很抱歉,前面提供的回答是错误的。在Python的multiprocessing模块中,确实有一个名为Pool的类。如果你在使用multiprocessing.Pool()…...
终极指南:用WarcraftHelper彻底解决魔兽争霸III现代系统兼容性问题
终极指南:用WarcraftHelper彻底解决魔兽争霸III现代系统兼容性问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在Wi…...
黑莓印相≠复古滤镜!基于CIE Lab色域分析的Midjourney色彩空间偏移校准方案(附Python验证脚本)
更多请点击: https://intelliparadigm.com 第一章:黑莓印相≠复古滤镜!基于CIE Lab色域分析的Midjourney色彩空间偏移校准方案(附Python验证脚本) 黑莓印相(Blackberry Print Tone)常被误认为是…...
利用大语言模型实现数据自动标注:Autolabel 实战指南
1. 项目概述:用大模型自动标注数据,告别人工标注的苦差事 如果你做过机器学习项目,尤其是监督学习,那你一定对数据标注这个环节又爱又恨。爱的是,有了高质量标注数据,模型性能才有保障;恨的是&a…...
Cursor-Learner:基于编辑器历史数据,自动生成个性化AI编程助手Prompt
1. 项目概述:一个帮你“诊断”编程习惯的智能助手 如果你和我一样,每天都在和 Cursor 或 WindSurf 这类 AI 驱动的代码编辑器打交道,那你肯定也遇到过这样的困惑:为什么有时候 AI 助手能精准地理解你的意图,写出漂亮的…...
告别一堆转换头!一个自研小工具搞定USB、网口、485、232、TTL全互连(附配置软件)
极简主义工程师的终极武器:全协议互连调试工具实战指南 每次出差调试设备,我的背包里总塞满了各种转换头——USB转串口、网口转485、232电平转换器...直到上个月在客户现场,当我蹲在机柜旁手忙脚乱切换第五个转换器时,螺丝刀不小心…...
团队知识管理的失效:人员流动如何不导致知识流失
一、软件测试团队知识管理的特殊价值与脆弱性在软件测试领域,知识是保障产品质量的核心资产。不同于开发环节的代码沉淀,测试知识兼具显性与隐性双重属性:显性知识体现在测试用例、缺陷报告、自动化脚本等文档中,而隐性知识则蕴含…...
Cloudflare + PlanetScale:在边缘运行全栈应用,数据库也不例外
全栈开发者面对的一道老难题 Cloudflare Workers 解决了计算层的全球分发问题——你的代码跑在 Cloudflare 遍布全球的 300 多个数据中心里,离用户近,启动快,不需要管理任何服务器。 但数据不一样。 数据库天然是"有状态的"&#x…...
仅限首批Beta开发者访问的Gemini Calendar高级API权限池即将关闭——现在掌握这6个私有端点将决定你团队的2025排期话语权
更多请点击: https://intelliparadigm.com 第一章:Gemini Google Calendar智能安排 Gemini 与 Google Calendar 的深度集成正在重塑日程管理范式。通过 Google Workspace 的授权 API 与 Gemini 的自然语言理解能力协同,用户可直接用日常语句…...
混合原型验证:软硬件协同的芯片设计革命
1. 混合原型验证:从割裂到统一的芯片设计革命在芯片设计的漫长周期里,硬件工程师和软件工程师常常像是在两个平行世界里工作。硬件团队埋头于RTL编码、综合、布局布线,最终将设计烧录进FPGA原型板,进行物理层面的调试和性能测试。…...
从零实现带霍尔传感器的BLDC方波调速系统
1. 从零搭建BLDC调速系统的硬件准备 第一次接触带霍尔传感器的无刷直流电机时,我对着桌上散落的电机、驱动板和STM32开发板发呆了半小时。这种看似简单的三线电机,内部却藏着精密的磁场控制和时序逻辑。我们先来认识下核心部件:BLDC电机通常有…...
