如何调整Matplotlib figure宽度适配Tkinter窗口 现有测试方案无效求助
Matplotlib嵌入Tkinter图形宽度适配窗口解决方案
当前实际效果:
你目前的问题是硬编码了图形初始尺寸和画布固定宽高,没有绑定窗口大小变化的动态调整逻辑,按以下步骤修改即可实现适配:
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
相关产品推荐
相关产品推荐

