python Matplotlib Tkinter-->导出pdf报表
环境
python:python-3.12.0-amd64
包:
matplotlib 3.8.2
reportlab 4.0.9
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
from reportlab.lib.pagesizes import letter
from reportlab.lib import colors
from reportlab.lib.units import inch
from reportlab.platypus import Table, TableStyle, SimpleDocTemplate, Image
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from io import BytesIO# 加载中文字体
font_path = r'C:\Windows\Fonts\STZHONGS.TTF'
pdfmetrics.registerFont(TTFont('SimHei', font_path))
print(pdfmetrics.getRegisteredFontNames())# 导出 PDF 报表
def export_pdf():# 将 matplotlib 图形转化为图像buf = BytesIO()fig1.savefig(buf, format='png', dpi=80)buf.seek(0)img = Image(buf, width=8 * inch, height=3 * inch)# 创建 PDF 表格data = [['堆体体积盘点报表', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8'],['名称', '堆体长度', '堆体宽度', '堆体高度', '占地面积', '堆体体积', '堆体密度', '堆体重量'],['1号仓', '36.022', '36.024', '35.063', '1019.495', '28105.247', '0.540', '15176.833'],['制表人:', '', '审核人:', '', '经理:', '', '日期:', '2022-7-9'],['堆体三维立体效果图', '', '', 'row4', '', '', '', ''],[img, '', '', '', 'row5', '', '', ''],['内容7', '', '', '', '', 'row6', '', '']]table = Table(data, colWidths=[1 * inch] * 8, rowHeights=[0.5 * inch] * 5 + [3.1 * inch] * 2)table.setStyle(TableStyle([('TEXTCOLOR', (0, 0), (-1, 0), colors.black),('ALIGN', (0, 0), (-1, 0), 'CENTER'),('FONTNAME', (0, 0), (-1, 0), 'SimHei'),('FONTSIZE', (0, 0), (-1, 0), 14),('BOTTOMPADDING', (0, 0), (-1, 0), 16),('SPAN', (0, 0), (7, 0)),('SPAN', (0, 4), (7, 4)),('SPAN', (0, 5), (7, 5)),('SPAN', (0, 6), (7, 6)),('TEXTCOLOR', (0, 1), (-1, -1), colors.black),('ALIGN', (0, 1), (-1, -1), 'CENTER'),('FONTNAME', (0, 1), (-1, -1), 'SimHei'),('FONTSIZE', (0, 4), (-1, 4), 14),('BOTTOMPADDING', (0, 1), (-1, -1), 16),('GRID', (0, 0), (-1, -1), 1, colors.black)]))# 保存 PDF 文件并显示导出成功的消息框pdf_file = SimpleDocTemplate("三维激光雷达 1号仓体积报表20220709.pdf", pagesize=letter)pdf_file.build([table])messagebox.showinfo('导出成功', 'PDF 文件已成功导出!')# 创建自定义工具栏类
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):show_toolbar = kwargs.pop('show_toolbar', True)super().__init__(*args, **kwargs)if not show_toolbar:self.pack_forget()self.custom_button_img1 = tk.PhotoImage(file='figure_pic1.png') # 创建第一个图片按钮self.custom_button1 = ttk.Button(self, image=self.custom_button_img1, command=lambda: print('111.'))self.custom_button1.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=export_pdf)self.custom_button2.pack(side=tk.LEFT) # 添加按钮到工具栏上# 创建 Tkinter 窗口
window = tk.Tk()
window.title("Matplotlib in Tkinter")# 设置窗口大小和位置
window.geometry('800x600')# 创建选项卡控件
notebook = ttk.Notebook(window)# 创建第一个选项卡
tab1 = ttk.Frame(notebook)
fig1 = plt.figure()
plt.plot([1, 2, 3], [4, 5, 6])
canvas1 = FigureCanvasTkAgg(fig1, master=tab1)
canvas1.draw()
toolbar1 = MyNavigationToolbar(canvas1, tab1)
toolbar1.update()
toolbar1.pack(side=tk.TOP, fill=tk.X, padx=5, pady=5)
canvas1.get_tk_widget().pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
notebook.add(tab1, text='图表1')# 创建第二个选项卡
tab2 = ttk.Frame(notebook)
fig2 = plt.figure()
plt.plot([3, 2, 1], [6, 5, 4])
canvas2 = FigureCanvasTkAgg(fig2, master=tab2)
canvas2.draw()
toolbar2 = MyNavigationToolbar(canvas2, tab2, show_toolbar=False)
toolbar2.update()
canvas2.get_tk_widget().pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
notebook.add(tab2, text='图表2')notebook.pack(fill=tk.BOTH, expand=True)window.mainloop()
注:
C:\Windows\Fonts\STZHONGS.TTF
STZHONGS.TTF 此名称是文件夹C:\Windows\Fonts\下面的文件属性里面的名称


图片资源下载(分享-->python Matplotlib Tkinter图片):
链接:https://pan.baidu.com/s/1vFOU52gG0bgK8RYuj-dzOg
提取码:2oy0
相关文章:
python Matplotlib Tkinter-->导出pdf报表
环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 reportlab 4.0.9 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk import tkinter as tk import tkinter.messagebox as messagebox impor…...
react-组件基础
1.目标 能够使用函数创建组件 能够使用class创建组件 能够给React元素绑定事件 能够使用state和setState() 能够处理事件中的this指向问题 能够使用受控组件方式处理表单 2.目录 React组件介绍 React组件的两种创建方式 React事件处理 有状态组件和无状态组件 组件中的state…...
The authenticity of host ‘github.com (20.205.243.166)‘ can‘t be established.
1、运行git clone报错: The authenticity of host github.com (20.205.243.166) cant be established. ECDSA key fingerprint is SHA256:p2QAC1TJYererOttrVc98/R1BWERWu3/LiyFdHfQM. Are you sure you want to continue connecting (yes/no/[fingerprint])? 这个…...
arduino uno R3驱动直流减速电机(蓝牙控制)
此篇博客用于记录使用arduino驱动直流减速电机的过程,仅实现简单的功能:PID调速、蓝牙控制 1、直流减速电机简介2、DRV8833电机驱动模块简介3、HC-05蓝牙模块简介电机转动测试4、PID控制5、蓝牙控制电机 1、直流减速电机简介 我在淘宝购买的电机&#x…...
智能家居控制系统(51单片机)
smart_home_control_system 51单片机课设,智能家居控制系统 使用及转载请标明出处(最好点个赞及star哈哈) Github地址,带有PPT及流程图 Gitee码云地址,带有PPT及流程图 以STC89C52为主控芯片,以矩阵键…...
软考高级系统分析师之 URL 知识点和例题
一、AI 解读 URL(统一资源定位器)的结构是网络上定位资源的一种方式。一个典型的URL由几个部分组成: 协议(Scheme): 定义了用于访问资源的协议类型,如http、https、ftp等。例如,在 http://www.…...
vmware虚拟机centos中/dev/cl_server8/root 空间不够
在使用vmware时发现自己的虚拟机的/dev/cl_server8/root空间不够了,没办法安装新的服务。所以查了一下改空间的办法。 1.在虚拟机关闭的状态下,选中需要扩容的虚拟机->设置->硬件-> 硬盘->扩展->填写扩大到的值。 2.打开虚拟机ÿ…...
C++/数据结构:AVL树
目录 一、AVL树的概念 二、AVL树的实现 2.1节点定义 2.2节点插入 三、AVL树的旋转 3.1新节点插入较高左子树的左侧:右单旋 3.2新节点插入较高右子树的右侧:左单旋 3.3新节点插入较高左子树的右侧---左右:先左单旋再右单旋 3.4新节点插…...
Mysql数据库_max_allowed_packet参数详解
本文目录 参数含义查看max_allowed_packet参数值修改max_allowed_packet参数值修改配置文件方式(需要重启)直接修改配置方式(不需要重启)注意事项 出现场景 参数含义 max_allowed_packet参数指的是MySQL服务端或者客户端接收一次…...
【数仓】Hadoop集群配置常用参数说明
Hadoop集群中,需要配置的文件主要包括四个 配置核心Hadoop参数: 编辑core-site.xml文件,设置Hadoop集群的基本参数,如文件系统、Hadoop临时目录等。 配置HDFS参数: 编辑hdfs-site.xml文件,设置HDFS的相关参…...
【go从入门到精通】什么是go?为什么要选择go?
go的出生: go语言(或Golang)是Google开发的开源编程语言,诞生于2006年1月2日下午15点4分5秒,于2009年11月开源,2012年发布go稳定版。Go语言在多核并发上拥有原生的设计优势,Go语言从底层原生支持…...
MySQL篇—执行计划介绍(第二篇,总共三篇)
☘️博主介绍☘️: ✨又是一天没白过,我是奈斯,DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣…...
nest.js使用nest-winston日志一
nest-winston文档 nest-winston - npm 参考:nestjs中winston日志模块使用 - 浮的blog - SegmentFault 思否 安装 cnpm install --save nest-winston winstoncnpm install winston-daily-rotate-file 在main.ts中 import { NestFactory } from nestjs/core; im…...
LeetCode刷题笔记之二叉树(四)
一、二叉搜索树的应用 1. 700【二叉搜索树中的搜索】 题目: 给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。代码&a…...
【MATLAB源码-第150期】基于matlab的开普勒优化算法(KOA)机器人栅格路径规划,输出做短路径图和适应度曲线。
操作环境: MATLAB 2022a 1、算法描述 开普勒优化算法(Kepler Optimization Algorithm, KOA)是一个虚构的、灵感来自天文学的优化算法,它借鉴了开普勒行星运动定律的概念来设计。在这个构想中,算法模仿行星围绕太阳的…...
最佳实践:Websocket 长连接状态如何保持
WebSocket 是一种支持通过单个 TCP 连接进行全双工通信的协议,相较于传统的 HTTP 协议,它更适合需要实时交互的应用场景。此协议在现代 Web 应用中扮演着至关重要的角色,尤其是在需要实时更新和通信的场合下维持持久连接。本文将探讨 WebSock…...
Unity AStar寻路算法与导航
在游戏开发中,寻路算法是一个非常重要的部分,它决定了游戏中角色的移动路径。Unity作为一款流行的游戏开发引擎,提供了许多内置的寻路算法,其中最常用的就是AStar算法。AStar算法是一种基于图的搜索算法,通过启发式搜索…...
JavaScript最新实现城市级联操作,json格式的数据
前置知识: <button onclick"doSelect()">操作下拉列表</button><hr>学历:<select id"degree"><option value"0">--请选择学历--</option><option value"1">专科<…...
SD NAND:为车载显示器注入智能与安全的心脏
SD NAND 在车载显示器的应用 在车载显示器上,SD NAND(Secure Digital NAND)可以有多种应用,其中一些可能包括: 导航数据存储: SD NAND 可以用于存储地图数据、导航软件以及车载系统的相关信息。这有助于提…...
矩阵的对角化
概述 对角化矩阵是线性代数中的一个重要概念,它涉及将一个方阵转换成一个对角阵,这个对角阵与原矩阵相似,其主要对角线上的元素为原矩阵的特征值。这样的转换简化了很多数学问题,特别是线性动力系统的求解和矩阵的幂运算。下面是…...
绝区零自动化助手:解放双手,让游戏回归乐趣的智能伴侣
绝区零自动化助手:解放双手,让游戏回归乐趣的智能伴侣 【免费下载链接】ZenlessZoneZero-OneDragon 绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄 项目地址: https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon …...
性能测试中的负载测试
性能测试中的负载测试详解 一、负载测试的基本概念 负载测试(Load Testing)是性能测试的一种重要类型,指模拟系统在预期或典型用户负载下运行,观察系统各项性能指标是否满足要求的过程。负载测试的目标不是把系统压垮(那是压力测试的目标),而是验证系统在正常到峰值范…...
从零到一:在CentOS 7上构建生产级Slurm计算集群
1. 为什么选择Slurm和CentOS 7的组合 在构建高性能计算集群时,资源管理器的选择往往让人头疼。我经历过Torque、LSF等各种方案的折腾,最后发现Slurm才是中小规模集群的"甜点"选择。这个开源工具不仅被全球TOP500超算广泛采用,更重要…...
intv_ai_mk11应用场景:产品经理用它输出PRD大纲、用户故事、竞品功能对比表
intv_ai_mk11在产品管理中的应用:PRD大纲、用户故事与竞品分析实战 1. 产品经理的AI助手新选择 作为产品经理,每天都要处理大量文档工作:撰写产品需求文档(PRD)、梳理用户故事、进行竞品分析...这些工作既重要又耗时。传统方式下࿰…...
Qwen3-0.6B-FP8惊艳效果:古文翻译+白话解释+典故溯源三重输出展示
Qwen3-0.6B-FP8惊艳效果:古文翻译白话解释典故溯源三重输出展示 1. 引言:当小模型遇上大智慧 你可能听过很多关于大模型的传说,动辄几百亿参数,需要顶级显卡才能跑起来。但今天我想给你看一个不太一样的家伙——Qwen3-0.6B-FP8。…...
Pixel Dimension Fissioner 效果展示:多模态内容生成惊艳作品集
Pixel Dimension Fissioner 效果展示:多模态内容生成惊艳作品集 1. 开篇:重新定义内容创作边界 当第一次看到Pixel Dimension Fissioner生成的作品时,很难相信这些充满创意和细节的内容完全由AI生成。这个多模态模型正在悄然改变我们对内容…...
保姆级教程:用FMIKit插件把Simulink模型转成FMU,再导入Modelica平台(附挖机案例)
从Simulink到Modelica:FMIKit插件实战指南与挖机模型转换案例 在跨平台仿真领域,功能样机接口(Functional Mock-up Interface)标准正逐渐成为不同建模工具间互操作的通用语言。想象一下这样的场景:您的团队使用Simulink建立了精密的液压系统模…...
记一次综合型流量分析 | 添柴不加火釉
核心摘要:这篇文章能帮你 ?? 1. 彻底搞懂条件分支与循环的适用场景,告别选择困难。 ?? 2. 掌握遍历DOM集合修改属性的标准姿势与性能窍门。 ?? 3. 识别流程控制中的常见“坑”,并学会如何优雅地绕过去。 ?? 主要内容脉络 ?? 一、痛…...
Pixel Epic · Wisdom Terminal 开发环境配置大全:PyCharm、IDEA、VS Code无缝集成
Pixel Epic Wisdom Terminal 开发环境配置大全:PyCharm、IDEA、VS Code无缝集成 1. 前言:为什么需要IDE集成? 作为一名开发者,你可能已经习惯了在熟悉的集成开发环境(IDE)中工作。但当你开始接触大模型开发时,往往会…...
2000-2025年逐8天全国1km分辨率日间地表温度数据(LST)
地表温度(Land Surface Temperature)作为地表能量平衡和气候系统的重要指标,能够揭示全国范围内的气候变化趋势与极端高温事件风险,有助于评估全球变暖背景下的地表温度情况,为城市规划和公共健康预警提供科学依据。 …...
