프레임의 자식 인 캔버스 (tkinter)에서 플롯을 지우는 방법을 찾으려고합니다. 내 문제는 프레임을 만든 클래스와 다른 클래스의 show() 함수에서 발생한다는 것입니다. 그래서 show()에 대한 아이디어는 여러 번 호출 될 것이고 show()가 호출 될 때마다 위젯을 파괴하고 처음부터 모든 것을 생성하는 대신 캔버스 내부의 음모를 프레임은 지워지거나 업데이트되지만 위젯은 보존됩니다.tkinter의 상위 프레임에서 하위 위젯의 플롯을 지우거나 업데이트하는 방법은 무엇입니까?
이 아마도 의사 코드에 쉽게 이해할 수 있습니다 : 나는 몇 가지 문제가있을 경우
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'
어떤 아이디어라도 환영합니다. 많은 감사합니다!
아무도 없습니까? 어떤 아이디어를 찾아야할까요? – edgarbc
프레임의 그림과 연결된 축을 지워서이 문제를 해결했습니다. 원래 프레임을 사용하여 그림과 축에 액세스하려고했습니다. 그러나, 나는 이것을 할 방법을 찾지 못했기 때문에 클래스 B의 생성자에 전달하기 전에 축을 프레임에 추가했습니다. – edgarbc