You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib FigureCanvas的print_figure中指定固定打印尺寸(PyQt5场景)

解决Matplotlib Canvas固定尺寸打印问题

核心方案

要实现固定尺寸打印,关键是在打印操作临时重置画布的尺寸与DPI,打印完成后恢复原参数,避免影响界面的自适应显示。

具体实现步骤

  • 重写Canvas类,封装固定尺寸打印的方法:
    1. 提前定义好打印需要的固定尺寸与DPI
    2. 打印前保存当前画布的原始尺寸和DPI
    3. 临时切换到打印用的固定参数
    4. 执行打印操作后,恢复原始参数并刷新画布

修改后的代码示例

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:01:04