我试图根据从Ttk.check按钮中 Select 的内容,在pyploy中显示不同的数据.为简单起见,在本例中,我将只try 更改标题.

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()函数时,绘图标题中的数字应该会增加.

当直接从代码中调用函数时,这是有效的.但是,选中和取消选中复选按钮确实会调用该函数(并在控制台中生成预期的输出),但它不会更改标题.执行上面的代码并选中/取消选中复选框4次将得到以下结果:

  • 剧情的标题将是《2号标题》.
  • 控制台将输出‘标题已更改为6’

我不明白为什么会发生这种事.为什么当我直接调用CHANGE_TITLE()函数时标题会改变,而从CheckButton调用时标题却不会改变?

推荐答案

您需要重新绘制画布.接下来(但不是问题的一部分),不需要plt.show()和first canvar.Drawing().

以下是修订后的守则:

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()

Python-3.x相关问答推荐

如何匹配字母,数字,短划线,逗号,但不是如果没有数字和字母?

具有多个值的极轴旋转和熔化/取消旋转(反转旋转)操作(Pandas 堆叠/取消堆叠交替/UDF覆盖)

向前/向后移动导致移动行的数据不可见

使用 iloc 或 loc 对多列进行过滤

Python webdrivermanager 和 Chrome 115.0 的 URL https://chromedriver.storage.googleapis.com/LATEST_RELEASE_115.0.5790 错误没有此类驱动程序

公开数据中的卫星图像网页抓取优化

GEKKO 在没有不等式的模型中抛出不等式定义错误

使用 NaN 计算 pct_change 时如何避免 bfill 或 ffill

Python3:是否可以将变量用作函数调用的一部分

删除Pandas 数据框行不起作用

SMTP 库 Python3:不太安全的应用程序访问

使用正则表达式捕获组解析地址

使用大型多个数据集,其中每个数据集包含多个值 - Pytorch

如何将虚拟变量列转换为多列?

内部如何使用 Python 语法?

如何使我的课程在 Python 中非常可打印?

multiprocessing.Queue 中的 ctx 参数

Python 类型提示语法如何/为什么起作用?

Python图例属性错误

如何修复:cx_Oracle.DatabaseError:DPI-1047:找不到 64 位 Oracle 客户端库 - Python