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

如何调整Matplotlib figure宽度适配Tkinter窗口 现有测试方案无效求助

Matplotlib嵌入Tkinter图形宽度适配窗口解决方案

当前实际效果:
Figure width size

你目前的问题是硬编码了图形初始尺寸和画布固定宽高,没有绑定窗口大小变化的动态调整逻辑,按以下步骤修改即可实现适配:

1. 调整初始化逻辑

删除固定的figsize参数,修改画布布局参数让其自动填充父容器:

import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt

# 初始化图形不写死figsize,保留dpi参数
fig = plt.figure(1, dpi = 80, constrained_layout = True)
ax = fig.add_subplot()
ax.set_title("Electrocardiogram") # 修正原拼写错误Electrocadiogram
ax.set_xlabel("Time(Sec)")
ax.set_ylabel("Voltage(mV)")
# 原代码中b参数已废弃,替换为visible参数
ax.grid(visible=True, which='major', color='#666666', linestyle='-')
ax.minorticks_on()
ax.grid(visible=True, which='minor', color='#666666', linestyle='-', alpha=0.2)

canvas = FigureCanvasTkAgg(fig, master=plotting_frame)
canvas.draw()
# 替换固定宽高的place方法,用pack实现自动填充父容器
canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)

2. 绑定窗口大小变化事件

给父容器绑定resize事件,窗口调整时自动更新图形尺寸:

def on_resize(event):
    # Tkinter像素转Matplotlib英寸单位:英寸 = 像素 / dpi
    width_in = event.width / fig.dpi
    height_in = event.height / fig.dpi
    fig.set_size_inches(width_in, height_in)
    canvas.draw()

# 绑定父容器大小变化触发适配逻辑
plotting_frame.bind("<Configure>", on_resize)

特殊场景适配

如果仅需要适配宽度、固定高度为420px,只需修改on_resize函数的高度参数即可:

def on_resize(event):
    width_in = event.width / fig.dpi
    height_in = 420 / fig.dpi # 固定高度
    fig.set_size_inches(width_in, height_in)
    canvas.draw()

如果必须使用place方法布局,可直接在on_resize函数中调用place方法动态更新宽度参数。

内容的提问来源于stack exchange,提问作者Kennerdol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:54:03