我试图找出如何清除画布(在tkinter中)作为画面的子画面的情节。我的问题是,这发生在show()函数内部,与创建框架的类不同。因此关于show()的想法是它将被多次调用,而不是每次调用show()时都会破坏小部件并从头开始创建所有内容,我希望画布中的内容是一个孩子的框架被清除/更新,但小部件被保留。
这可能在伪代码中更容易理解:
class A():
def__init__(self, master):
sframe = Frame(master)
sframe.pack(side=RIGHT)
f = Figure(figsize=(3,2), dpi=100)
a = f.add_subplot(122);
# initially plots a sine wave
t = arange(0.0, 1, 0.01);
s = sin(2*pi*t);
a.plot(t,s);
canvas = FigureCanvasTkAgg(f, master=sframe)
canvas.show()
canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
# now i create the other object that will call show()
data_obj = B(sframe)
class B():
...
show(self, frame):
_wlist = frame.winfo_children()
for item in _wlist:
item.clear() # or something like this
# and then re-plot something or update the current plot
代码的最后一部分是我遇到问题的地方。我不知道如何清除框架中的小部件。我如何知道它是哪种类型的小部件以及如何清除或更新它?我明白了:
*** AttributeError: Canvas instance has no attribute 'clear'
任何想法都非常受欢迎。非常感谢!
答案 0 :(得分:0)
我没有清除画布的子画面(使用winfo_class()),而是在框架中传递了图形的轴,并且还传递了画布。
在A班:
frame.canvas = canvas
frame.ax = a
然后在B类中我们使用框架清除轴来访问它,更新它并显示画布:
self.sframe.ax.clear()
self.sframe.ax.plot(newline)
self.sframe.canvas.show()
如果您知道通过浏览框架的子项来访问轴的方法,请告诉我......