【发布时间】:2010-11-05 14:01:38
【问题描述】:
简化问题:由于某种原因,当我点击生成图按钮时,图没有更新。
global f
master = Tk()
plotFrame = Frame(master)
plotFrame.pack(side=TOP)
f = Figure()
canvas = FigureCanvasTkAgg(f, plotFrame)
canvas.get_tk_widget().pack()
toolbar = NavigationToolbar2TkAgg(canvas,master)
toolbar.pack(side=BOTTOM)
def grph():
graph1 = f.add_subplot(111)
graph1.plot([1,2,3])
genButton = Button(master, text="Generate plots...", command=grph)
genButton.pack(side=LEFT,anchor=W)
master.mainloop()
【问题讨论】:
-
您必须粘贴部分(如果不是全部)代码。这很可能与变量范围有关。也就是说:您正在访问在创建画布的函数上可用但对按钮回调函数不可用的对象
-
如果我将感兴趣的变量设为全局变量,会这样做吗? (我试过了,它不起作用)。
-
不要使用全局。假设您的回调需要变量
x和y,然后定义您的回调以接受它们作为参数(def my_callback(x, y): ...)。然后,当您将回调附加到按钮时,使用 lambda 绑定这些变量,如下所示:my_button.config(lambda x=x, y=y: my_callback(x, y)) -
Tkinter 可以隐藏异常。你把打印语句放在回调函数的什么地方?如果你还没有,把它放在函数的末尾,看看它是否能毫无例外地通过。如果不是,则将函数体放在一个裸露的 try/except 中,并打印生成的异常以查看它是什么。
-
@thenickname:当您尝试在调试您的代码方面寻求帮助时,您需要向我们展示代码。通常,Tkinter 在绑定中执行任何也可以直接执行的操作都没有问题。你做错了什么,但除非我们看到代码,否则我们不可能知道