如何在Matplotlib FigureCanvas的print_figure中指定固定打印尺寸(PyQt5场景)
解决Matplotlib Canvas固定尺寸打印问题
核心方案
要实现固定尺寸打印,关键是在打印操作临时重置画布的尺寸与DPI,打印完成后恢复原参数,避免影响界面的自适应显示。
具体实现步骤
- 重写Canvas类,封装固定尺寸打印的方法:
- 提前定义好打印需要的固定尺寸与DPI
- 打印前保存当前画布的原始尺寸和DPI
- 临时切换到打印用的固定参数
- 执行打印操作后,恢复原始参数并刷新画布
修改后的代码示例
from matplotlib.backends.backend_qt5agg import FigureCanvas from matplotlib.figure import Figure class Canvas(FigureCanvas): def __init__(self): # 预设打印用的固定尺寸(英寸)和DPI self.print_figsize = (5, 3) self.print_dpi = 300 fig = Figure(figsize=self.print_figsize) super().__init__(fig) # 添加示例绘图逻辑(可替换为你的代码) self.ax = fig.add_subplot(111) self.ax.plot([1, 2, 3], [4, 5, 1]) def print_with_fixed_size(self, output_path): # 保存当前画布的原始参数 orig_size = self.figure.get_size_inches() orig_dpi = self.figure.dpi try: # 设置打印用的固定尺寸和DPI self.figure.set_size_inches(*self.print_figsize) self.figure.set_dpi(self.print_dpi) # 执行打印 self.print_figure(output_path, dpi=self.print_dpi) finally: # 恢复原始参数,保证界面显示不受影响 self.figure.set_size_inches(orig_size) self.figure.set_dpi(orig_dpi) # 刷新画布以恢复界面显示 self.draw()
关键说明
- 使用
try...finally块确保无论打印是否成功,都会恢复原始参数,避免界面显示异常 print_dpi可按需调整,300是兼顾清晰度与文件大小的常用打印DPI- 如果需要调用系统打印对话框,可结合PyQt5的
QPrintDialog获取打印路径后,调用上述print_with_fixed_size方法
内容的提问来源于stack exchange,提问作者justRandomLearner
相关产品推荐
相关产品推荐

