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

Tkinter主窗口点击PLOT按钮后缩小,如何固定窗口尺寸?

解决Tkinter主窗口点击按钮后缩小的问题

问题原因

你当前使用了matplotlib的pyplot全局接口(比如plt.figure()、plt.gcf()),这些全局操作会干扰Tkinter主窗口的布局状态,导致主窗口尺寸被意外修改,哪怕已经设置了root.resizable(False, False)。

解决方案

改用matplotlib的面向对象API创建绘图对象,完全避免使用pyplot的全局函数,同时确保主窗口的布局逻辑稳定。

修改后的完整代码

import tkinter as tk
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np

def plot_sine_wave():
    x = np.linspace(0, 2 * np.pi, 100)
    y = np.sin(x + np.random.uniform(-0.5, 0.5))

    plot_window = tk.Toplevel(root)
    plot_window.title("Random Sine Wave Plot")

    # 用面向对象方式创建绘图对象,不依赖plt全局接口
    fig = Figure(figsize=(6, 4), dpi=100)
    ax = fig.add_subplot(111)
    ax.plot(x, y)
    ax.set_xlabel("x")
    ax.set_ylabel("y")
    ax.set_title("Random Sine Wave")
    ax.grid(True)

    # 将绘图画布添加到新窗口
    canvas = FigureCanvasTkAgg(fig, master=plot_window)
    canvas.draw()
    canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)

# 主窗口设置
root = tk.Tk()
root.title("Sine Wave Plot")
root.geometry("200x100")
root.resizable(False, False)

plot_button = tk.Button(root, text="PLOT", command=plot_sine_wave)
plot_button.pack(pady=20)

root.mainloop()

关键修改点

  • 移除import matplotlib.pyplot as plt,改用from matplotlib.figure import Figure直接创建独立的Figure实例
  • 用fig = Figure(...)和ax = fig.add_subplot(111)替代plt.figure()等全局绘图操作
  • 绘图时使用ax.set_xlabel()、ax.set_title()等面向对象方法,而非plt.xlabel()这类全局方法
  • 给画布的pack()方法添加fill=tk.BOTH, expand=True,让绘图窗口的画布能自适应窗口大小

这样修改后,主窗口的尺寸会完全固定,点击PLOT按钮只会弹出新的绘图窗口,不会影响原主窗口的大小。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:54:56