python Matplotlib Tkinter--pack 框架案例
环境
python:python-3.12.0-amd64
包:
matplotlib 3.8.2
pillow 10.1.0
版本一
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
import tkinter as tk
import tkinter.messagebox as messagebox
import tkinter.ttk as ttk# 创建自定义工具栏类
class MyNavigationToolbar(NavigationToolbar2Tk):toolitems = [('Home','回到初始状态','home','home'),('Back', '后退', 'back', 'back'),('Home', '前进', 'forward', 'forward'),('Pan', '平移', 'move', 'pan'),('Zoom', '缩放', 'zoom_to_rect', 'zoom'),('Save', '保存', 'filesave', 'save_figure')]def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)def __init__(self, canvas_, window_):NavigationToolbar2Tk.__init__(self, canvas_, window_)self.custom_button_img1 = tk.PhotoImage(file='figure_pic1.png') # 创建第一个图片按钮self.custom_button = ttk.Button(self, image=self.custom_button_img1, command=lambda: self.toggle_figure2())self.custom_button.pack(side=tk.LEFT) # 添加按钮到工具栏上self.custom_button_img2 = tk.PhotoImage(file='figure_pic2.png') # 创建第二个图片按钮self.custom_button2 = ttk.Button(self, image=self.custom_button_img2, command=lambda: print('111.'))self.custom_button2.pack(side=tk.LEFT) # 添加按钮到工具栏上self.fig2_visible = False # 记录figure2的可见性def toggle_figure2(self):if self.fig2_visible:canvas2.get_tk_widget().pack_forget() # 隐藏figure2self.fig2_visible = Falseelse:canvas2.get_tk_widget().pack() # 显示figure2self.fig2_visible = True# 创建 Tkinter 窗口
window = tk.Tk()
window.title("Matplotlib in Tkinter")# 禁用窗口最大化功能
window.resizable(False, False)# 设置窗口大小和位置
#window.geometry('800x600')top_frame = tk.Frame(window)
top_frame.pack(fill=tk.BOTH, expand=True)
bottom_frame = tk.Frame(window)
bottom_frame.pack(fill=tk.BOTH, expand=True)fig1 = plt.figure()
plt.plot([1, 2, 3], [4, 5, 6])
fig2 = plt.figure()
plt.plot([3, 2, 1], [6, 5, 4])canvas1 = FigureCanvasTkAgg(fig1)
canvas1.draw()
canvas2 = FigureCanvasTkAgg(fig2)
canvas2.draw()window.iconbitmap('./icon.ico')toolbar_frame = ttk.Frame(top_frame) # 创建放置自定义工具栏的frame
toolbar1 = MyNavigationToolbar(canvas1, window)
toolbar1.update()
toolbar1.pack(side=tk.TOP, fill=tk.X, expand=True) # 将自定义工具栏放置在toolbar_frame中,并确保其占据可用空间
toolbar_frame.pack(side=tk.TOP, fill=tk.X) # 将toolbar_frame放置在top_frame中,确保其占据可用空间canvas1.get_tk_widget().pack(fill=tk.BOTH, expand=True) # 将figure1的canvas放在top_frame中
canvas2.get_tk_widget().pack(fill=tk.BOTH, expand=True) # 将figure2的canvas放在bottom_frame中
canvas2.get_tk_widget().pack_forget() # 隐藏figure2window.mainloop()
版本二
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
import tkinter as tk
import tkinter.messagebox as messagebox
import tkinter.ttk as ttk# 创建自定义工具栏类
class MyNavigationToolbar(NavigationToolbar2Tk):toolitems = [('Home','回到初始状态','home','home'),('Back', '后退', 'back', 'back'),('Home', '前进', 'forward', 'forward'),('Pan', '平移', 'move', 'pan'),('Zoom', '缩放', 'zoom_to_rect', 'zoom'),('Save', '保存', 'filesave', 'save_figure')]def __init__(self, canvas_, window_):super().__init__(canvas_, window_)self.custom_button_img1 = tk.PhotoImage(file=r'E:\pythonProject\合并/figure_pic1.png') # 创建第一个图片按钮self.custom_button = ttk.Button(self, image=self.custom_button_img1, command=lambda: self.toggle_figure2())self.custom_button.pack(side=tk.LEFT) # 添加按钮到工具栏上self.custom_button_img2 = tk.PhotoImage(file=r'E:\pythonProject\合并/figure_pic2.png')self.custom_button2 = ttk.Button(self, image=self.custom_button_img2, command=lambda: print('111.'))self.custom_button2.pack(side=tk.LEFT) # 添加按钮到工具栏上self.fig2_visible = False # 记录figure2的可见性def toggle_figure2(self):if self.fig2_visible:canvas2.get_tk_widget().pack_forget() # 隐藏figure2self.fig2_visible = Falseelse:canvas2.get_tk_widget().pack() # 显示figure2self.fig2_visible = True# 创建 Tkinter 窗口
window = tk.Tk()
window.title("Matplotlib in Tkinter")# 禁用窗口最大化功能
window.resizable(False, False)# 设置窗口大小和位置
#window.geometry('800x600')top_frame = tk.Frame(window)
top_frame.pack(fill=tk.BOTH, expand=True)
bottom_frame = tk.Frame(window)
bottom_frame.pack(fill=tk.BOTH, expand=True)fig1 = plt.figure()
plt.plot([1, 2, 3], [4, 5, 6])
fig2 = plt.figure()
plt.plot([3, 2, 1], [6, 5, 4])canvas1 = FigureCanvasTkAgg(fig1)
canvas1.draw()
canvas2 = FigureCanvasTkAgg(fig2)
canvas2.draw()window.iconbitmap(r'E:\pythonProject\合并/icon.ico')toolbar_frame = ttk.Frame(top_frame) # 创建放置自定义工具栏的frame
toolbar1 = MyNavigationToolbar(canvas1, window)
toolbar1.update()
toolbar1.pack(side=tk.TOP, fill=tk.X, expand=True) # 将自定义工具栏放置在toolbar_frame中,并确保其占据可用空间
toolbar_frame.pack(side=tk.TOP, fill=tk.X) # 将toolbar_frame放置在top_frame中,确保其占据可用空间canvas1.get_tk_widget().pack(fill=tk.BOTH, expand=True) # 将figure1的canvas放在top_frame中
canvas2.get_tk_widget().pack(fill=tk.BOTH, expand=True) # 将figure2的canvas放在bottom_frame中
canvas2.get_tk_widget().pack_forget() # 隐藏figure2window.mainloop()

图片资源下载(分享-->python Matplotlib Tkinter图片):
链接:https://pan.baidu.com/s/1vFOU52gG0bgK8RYuj-dzOg
提取码:2oy0
相关文章:
python Matplotlib Tkinter--pack 框架案例
环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 pillow 10.1.0 版本一 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk import tkinter as tk import tkinter.messagebox as messagebox…...
连接未来:嵌入式系统在物联网时代的应用
连接未来:嵌入式系统在物联网时代的应用 随着物联网技术的不断发展,嵌入式系统在物联网时代扮演着至关重要的角色。嵌入式系统作为连接物理世界和数字世界的桥梁,为物联网的实现提供了技术支持和基础设施。以下将从几个方面探讨嵌入式系统在…...
自动驾驶中的障碍物时间对齐法
描述 自动驾驶算法使用的系统往往不是实时系统,因此每个节点间拿到的数据可能不是同一时间的数据,从而造成系统误差,针对这一现象,工程上往往采用时间对齐内插外推法。这里我们用感知障碍物来举例。 自动驾驶系统有许多重要模块…...
介绍 PIL+IPython.display+mtcnn for 音视频读取、标注
1. nn.NLLLoss是如何计算误差的? nn.NLLLoss是负对数似然损失函数,用于多分类问题中。它的计算方式如下:首先,对于每个样本,我们需要将其预测结果通过softmax函数转换为概率分布。softmax函数可以将一个向量映射为一个概率分布&…...
C语言中strstr函数的使用!
strstr函数的作用是什么? 查找子字符串 具体直接看下面的这段代码我相信你必明白 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { char *p1 "abcdefghijklmnopqrstuvwxyz"; char* p2 "abc"; char* r…...
Vue项目中,src目录下的vue.app文件介绍
在 Vue 项目中,src 文件夹通常包含了项目的核心代码。在这个文件夹下,App.vue 是一个特殊的文件,它代表了整个 Vue 应用的根组件。 App.vue 是一个单文件组件(Single File Component, 简称 SFC),它允许你将…...
【Android】坐标系
Android 系统中有两种坐标系,分别为 Android 坐标系和 View 坐标系。了解这两种坐标系能够帮助我们实现 View 的各种操作,比如我们要实现 View 的滑动,你连这个 View 的位置都不知道,那如何去操作呢? 一、Android 坐标…...
OSCP靶场--Slort
OSCP靶场–Slort 考点(1.php 远程文件包含 2.定时任务提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.178.53 -sV -sC -p- --min-rate 5000 Starting Nmap 7.92 ( https://nmap.org ) at 2024-02-24 04:37 EST Nmap scan report for 192.168.178.53 …...
大数据职业技术培训包含哪些
技能提升认证考试,旨在通过优化整合涵盖学历教育、职业资格、技术水平和高新技术培训等各种教育培训资源,通过大数据行业政府引导,推进教育培训的社会化,开辟教育培训新途径,围绕大数据技术人才创新能力建设࿰…...
【Java程序设计】【C00313】基于Springboot的物业管理系统(有论文)
基于Springboot的物业管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的物业管理系统,本系统有管理员、物业、业主以及维修员四种角色权限; 管理员进入主页面,主要功能包…...
TensorFlow训练大模型做AI绘图,需要多少的GPU算力支撑
TensorFlow训练大模型做AI绘图,需要多少的GPU算力支撑!这个问题就涉及到了资金投资的额度了。众所周知,现在京东里面一个英伟达的显卡,按照RTX3090(24G显存-涡轮风扇)版本报价是7000-7500之间。如果你买一张这样的单卡…...
docker创建mongodb数据库容器
介绍 本文将通过docker创建一个mongodb数据库容器 1. 拉取mongo镜像 docker pull mongo:3.63.6版本是一个稳定的版本,可以选择安装此版本。 2. 创建并启动主数据库 容器数据卷配置 /docker/mongodb/master/data # 数据库数据目录(宿主机&am…...
Python并发编程:多线程-线程理论
一 什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程(流水线的工作需要电源,电源就相当于CPU),而一条流水线必须属于一个…...
自定义Chrome的浏览器开发者工具DevTools界面的字体和样式
Chrome浏览器开发者工具默认的字体太小,想要修改但没有相关设置。 外观——字体可以自定义字体,但大小不可以调整。 github上有人给出了方法 整理为中文教程: 1.打开浏览器开发者工具,点开设置——实验,勾上红框设…...
人事|人事管理系统|基于Springboot的人事管理系统设计与实现(源码+数据库+文档)
人事管理系统目录 目录 基于Springboot的人事管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员登录 2、员工管理 3、公告信息管理 4、公告类型管理 5、培训管理 6、培训类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、…...
React18源码: Fiber树中的优先级与帧栈模型
优先级{#lanes} 在全局变量中有不少变量都以Lanes命名 如workInProgressRootRenderLanes, subtreeRenderLanes其作用见上文注释它们都与优先级相关 React中有3套优先级体系,并了解了它们之间的关联关系现在来看下fiber树构造过程中,车道模型Lane的具体应…...
Hive 最全面试题及答案(基础篇)
基本知识 hive元数据存储 Hive 元数据存储了关于表、分区、列、分桶等信息。 在生产环境中,通常会将 Hive 的元数据存储在外部的关系型数据库中,如 MySQL 或 PostgreSQL。这样可以提供更好的性能、可扩展性和容错性。通过配置 Hive 的元数据存储为 MySQL 或 PostgreSQL,可以…...
【力扣】整数反转,判断是否溢出的数学解法
整数反转原题地址 方法一:数学 反转整数 如何反转一个整数呢?考虑整数操作的3个技巧: xmod10 可以取出 x 的最低位,如 x123 , xmod103 。x/10 可以去掉 x 的最低位,如 x123 , x/10 …...
Jmeter之内置函数__property和__P的区别
1. __property函数 作用 读取 Jmeter 属性 语法格式 ${__property(key,var,default)} 参数讲解 小栗子 ${__property(key)} 读取 key 属性如果找不到 key 属性,则返回 key(属性名) ${__property(key,,default)} 读取 key 属性如果找不到 k…...
GPT润色指令
1. GPT润色指令 Below is a paragraph from an academic paper. Polish the writing to meet the academic style,improve the spelling, grammar, clarity, concision and overall readability. When necessary, rewrite the whole sentence. Paragraph :你的句子…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
算法刷题-回溯
今天给大家分享的还是一道关于dfs回溯的问题,对于这类问题大家还是要多刷和总结,总体难度还是偏大。 对于回溯问题有几个关键点: 1.首先对于这类回溯可以节点可以随机选择的问题,要做mian函数中循环调用dfs(i&#x…...
