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

Tkinter按钮调用matplotlib.pyplot.plot时窗口及文本缩小如何解决

问题根因

该问题由matplotlib与Tkinter的DPI缩放规则冲突导致:matplotlib初始化时会自动读取系统高DPI缩放配置,修改进程全局的GUI缩放参数,覆盖了Tkinter原有窗口的适配逻辑,最终出现窗口、字体整体缩小的现象。

解决方案

以下提供三种可直接落地的修复方案,按需选择即可:

方案1:强制固定matplotlib DPI配置(改动最小)

在导入matplotlib pyplot后立即添加两行配置,关闭自动DPI调整,无需改动其他业务逻辑:

from tkinter import *
from tkinter.font import Font
from matplotlib import pyplot as plt
# 新增配置,固定DPI避免自动修改全局缩放
plt.rcParams['figure.dpi'] = 96
plt.rcParams['figure.raise_window'] = False

def Plot():
    x = [0,1]
    y = [0,2]
    plt.plot(x,y)
    plt.show()

root = Tk()
root.geometry("100x100")
root.resizable(width=False, height=False)

text = Label(root, text="Testing", font=Font(size=20))
text.pack()

bnt = Button(root, text="Click me", command=Plot, font=Font(size=15))
bnt.pack()
root.mainloop()

方案2:提前开启Tkinter高DPI感知(Windows平台适用,修复更彻底)

在创建Tkinter根窗口前调用系统接口开启进程高DPI感知,从根源避免两个GUI框架的缩放冲突:

import ctypes
from tkinter import *
from tkinter.font import Font
from matplotlib import pyplot as plt

# 新增:开启进程高DPI感知,Windows系统下生效
ctypes.windll.shcore.SetProcessDpiAwareness(1)

def Plot():
    x = [0,1]
    y = [0,2]
    plt.plot(x,y)
    plt.show()

root = Tk()
root.geometry("100x100")
root.resizable(width=False, height=False)

text = Label(root, text="Testing", font=Font(size=20))
text.pack()

bnt = Button(root, text="Click me", command=Plot, font=Font(size=15))
bnt.pack()
root.mainloop()

方案3:嵌入matplotlib画布到Tkinter窗口(长期开发推荐)

如果后续需要频繁在Tkinter程序中使用绘图能力,建议直接将matplotlib画布作为Tkinter组件嵌入,完全避免pyplot独立窗口的全局参数修改问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:30:01