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 

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

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

相关文章

你知道哪里有Alzet购买吗?

Alzet Osmotic Pumps 是 ALZA 公司于二十世纪七十年代发明的一种用于体内药物缓释的工具。ALZA公司是一家著名的药物研发公司,由其研发的 Alzet 植入式胶囊渗透压泵一开始是用于公司内部和相关科研机构做药物测试用的,但是不久之后,由于渗透压…

46.仿简道云公式函数实战-文本函数-CHAR

1. CHAR函数 函数可将计算机其他类型的数字代码转换为字符。 2. 函数用法 CHAR(number) CHAR 函数可将计算机其他类型的数字代码转换为字符。 Number:用于指定字符的数字。 3. 函数示例 CHAR(10),即返回值为换行字符"\n"。 目前仿简道…

电脑背景图片怎么设置?这个方法让你一目了然

电脑背景图片的设置是个性化电脑桌面的重要步骤之一。一张美观的背景图片不仅可以为电脑带来视觉愉悦,还能反映个人品味和风格。在本文中,我们将介绍电脑背景图片的设置方法,共包括三种方式,通过分步骤详细说明,帮助用…

【重温设计模式】适配器模式及其Java示例

【重温设计模式】适配器模式及其Java示例 适配器模式的介绍 在软件开发的世界里,设计模式如同是我们的罗盘,指引着我们在复杂的代码海洋中航行。而其中的适配器模式,就如同是我们手中的万能钥匙,让我们能够灵活应对各种各样的设…

解决Maven爆红以及解决 Idea 卡在 Resolving问题

关于 Idea 卡在 Resolving(前提是Maven的setting.xml中配置好了阿里云和仓库) 参考文章https://blog.csdn.net/jiangyu1013/article/details/95042611 解决Maven爆红参考文章https://devpress.csdn.net/beijing/656d993b76f0791b6eca7bb0.html?dp_toke…

IP 电话

1 IP 电话概述 IP 电话是在互联网上传送多媒体信息。 多个英文同义词: VoIP (Voice over IP) Internet Telephony VON (Voice On the Net) 1.1 狭义的和广义的 IP 电话 狭义的 IP 电话:指在 IP 网络上打电话。 广义的 IP 电话:不仅仅是…

路由器端口映射如何配置?

在网络通信中,路由器是一个重要的设备,它负责将数据包从一个网络传输到另一个网络。路由器的端口映射配置是一种重要的设置,可以使外部网络中的计算机通过访问路由器上的特定端口与内部网络中的计算机进行通信。本文将介绍什么是路由器端口映…

24考研成绩查询时间已公布!附最全查分攻略!

2月26日早上9点起! 2024考研初试成绩即将公布! 考研初试成绩即将公布,同学们都在紧张地期待着自己的成绩。不同院校的成绩查询入口开通时间有所不同,具体时间请大家查看各自官网的通知。 成绩在哪查?怎么查&#xff1…

ASP.NET MVC中使用Autofac依赖注入

ASP.NET MVC中使用Autofac依赖注入 官网文档:MVC — Autofac 7.0.0 documentation 2024年02月26日在.net 4.8 framework 建立的MVC项目中测试通过 引入NUGET包:Autofac和Autofac.Mvc5 Global中加入以下代码: //autofac注入ContainerBuild…

【力扣 - 爬楼梯】

题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 方法一:动态规划 思路和算法 我们用 f(x) 表示爬到第 x 级台阶的方案数,考虑最后一步可能跨了一级台阶&#…

LeetCode_Java_转变日期格式、种花问题(题目+思路+代码)

目录 1507. 转变日期格式 605.种花问题 1507. 转变日期格式 给你一个字符串 date ,它的格式为 Day Month Year ,其中: Day 是集合 {"1st", "2nd", "3rd", "4th", ..., "30th", "3…

Qt篇——QTableWidget保存表格数据到Excel文件中

代码如下&#xff1a; &#xff08;pro文件中添加QT axcontainer&#xff09; #include <QAxObject>void MainWindow::saveTableToExcel() {QDateTime current_date_time QDateTime::currentDateTime();QString excelName "data_" current_date_time.toSt…

Mysql 高可用解决方案

1.环境说明 操作系统&#xff1a;centos7.7 主服务器&#xff1a;node2(192.168.1.102) 从服务器&#xff1a;node3(192.168.1.103) keepalived中虚拟ip(VIP):192.168.1.100 2.准备事项 主库和从库数据库的版本一致把主库的数据同步给从库一份 3.主库配置 3.1 编辑MySQL配…

ETL是什么

一、ETL概念 ETL&#xff0c;是英文Extract-Transform-Load的缩写&#xff0c;用来描述将数据从来源端经过抽取&#xff08;extract&#xff09;、转换&#xff08;transform&#xff09;、加载&#xff08;load&#xff09;至目的端的过程。ETL一词较常用在数据仓库&#xff…

2024.2.26 训练记录(1)

每天的题目总结在一起&#xff0c;睡觉之前一定要再看一遍复习一下思路尽快恢复状态&#xff0c;计划是先把前几场没补的牛客补一下&#xff0c;然后开始刷洛谷 文章目录 牛客 寒假集训4F 来点每日一题牛客 寒假集训4H 数三角形&#xff08;hard&#xff09;牛客 寒假集训4K 方…

Gemma谷歌(google)开源大模型微调实战(fintune gemma-2b)

Gemma-SFT Gemma-SFT(谷歌, Google), gemma-2b/gemma-7b微调(transformers)/LORA(peft)/推理 项目地址 https://github.com/yongzhuo/gemma-sft全部weights要用fp32/tf32, 使用fp16微调十几或几十的步数后大概率lossnan;(即便layer-norm是fp32也不行, LLaMA就没有这个问题, …

2024程序员容器化上云之旅-第2集-Ubuntu-WSL2-Windows11版:接近深洞

故事梗概 Java程序员马意浓在互联网公司维护老旧电商后台系统。 渴望学习新技术的他在工作中无缘Docker。 他开始自学Vue3并使用SpringBoot3完成了一个前后端分离的Web应用系统&#xff0c;并打算将其用Docker容器化后用K8s上云。 3 挑选工具 马意浓画好架构图后&#xff…

PHP 函数四

一 fgets(resource $stream, ?int $length null) 从文件指针中读取一行。 返回字符串&#xff0c;如果文件指针中没有更多的数据了则返回 false。错误发生时返回 false。 $stream 为文件资源&#xff0c;必须指向fopen()或fscokopen()成功打开的文件。文件打开之后&#x…

Java类加载过程及双亲委派原则

Java类加载过程&#xff1a; 加载&#xff08;Loading&#xff09;&#xff1a;当Java程序运行时&#xff0c;需要使用某个类时&#xff0c;Java虚拟机&#xff08;JVM&#xff09;会尝试加载这个类。加载的过程包括通过类的全限定名&#xff08;Fully Qualified Name&#xff…

安防视频监控平台EasyNVR级联视频上云管理平台EasyNVS,出现报错“i/o deadline reached”该如何解决?

上云网关管理平台EasyNVS视频综合管理系统具备汇聚与管理EasyGBS、EasyNVR等平台的能力&#xff0c;系统可以将接入的视频资源实现视频能力统一输出&#xff0c;并能进行远程可视化运维等管理功能&#xff0c;还能解决设备现场没有固定公网IP却需要在公网直播的需求。 有用户反…