如何使用复选按钮更改Pyplot轴的属性



我试图根据Ttk.check按钮的选择在pyplot中显示不同的数据。为了简单起见,在本例中我只尝试更改标题。

import tkinter as tk
from tkinter import ttk
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
import numpy as np
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
# create data to plot
xdata = np.linspace(0, 100, 100)
ydata = 0.1*xdata ** 2
# create window
root = tk.Tk()
# create figure
fig = plt.Figure(figsize = (10, 3), dpi = 100)
ax = fig.add_subplot()
ax.plot(xdata, ydata)
plt.show()
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack()
i = 0
def change_title():
global i
i += 1
ax.set_title(f'Title number {i}')
print(f'Title changed to {i}')

change_title()
change_title()
checkbutton = ttk.Checkbutton(root, command=change_title).pack()
root.mainloop()

因此,每次调用change_title((函数时,绘图标题中的数字都应该增加。

当直接从代码中调用函数时,这就起作用了。然而,选中和取消选中checkbutton确实会调用该函数(并在控制台中产生预期的输出(,但不会更改标题。执行上面的代码并勾选/取消勾选复选框(例如4次(将得到以下结果:

  • 情节标题为"标题编号2">
  • 控制台将输出"标题更改为6">

我不明白为什么会这样。为什么当我直接调用change_title((函数时,标题会发生变化,而当从Checkbutton调用它时,标题不会发生变化?

您需要重新绘制画布。除此之外,但不是问题的一部分,不需要plt.show((和第一个canvas.draw((。

以下是修订后的代码:

import tkinter as tk
from tkinter import ttk
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
import numpy as np
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
# create data to plot
xdata = np.linspace(0, 100, 100)
ydata = 0.1*xdata ** 2
# create window
root = tk.Tk()
# create figure
fig = plt.Figure(figsize = (10, 3), dpi = 100)
ax = fig.add_subplot()
ax.plot(xdata, ydata)
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().pack()
i = 0
def change_title():
global i
i += 1
ax.set_title(f'Title number {i}')
print(f'Title changed to {i}')
canvas.draw()

change_title()
checkbutton = ttk.Checkbutton(root, command=change_title).pack()
root.mainloop()

最新更新