저는 파이썬과 Tkinter를 처음 사용하기 때문에 어떤 것이 가장 간단한 지 알 수 없습니다. 누군가 아래의 코드를 확인하고 하위 클래스에 정의 된 radiobutton에 의해 반환 된 값을 어떻게 추적하여 부모 클래스에 전달할 수 있는지 말해 줄 수 있습니까? 나는 컴파일 한 후 오류를 다음 얻을 :자식 클래스에 정의 된 라디오 버튼 값을 파이썬의 부모 클래스에 전달합니다.
AttributeError: Toplevel instance has no attribute 'trace_fun'
나는 자식 클래스 본문에 trace_fun
을 정의한 이후이 오류가있는 이유 모르겠습니다. 부모 클래스에서 변수를 성공적으로 추적했지만 하위 클래스에서 변수를 찾으려고 시도하는 동안 위의 오류가 발생했습니다.
from Tkinter import *
class Parent(Frame):
classvar = 0
def __init__(self):
Frame.__init__(self)
self.master.title("Parent WIndow")
self.master.geometry("200x100")
self.grid()
self._button = Button(self, text="Create", width=10, command=self.new_window)
self._button.grid(row=0, column=0, sticky=E+W)
def new_window(self):
self.new = Child()
class Child(Parent, Frame):
def __init__(self):
Parent.__init__(self)
new = Frame.__init__(self)
new = Toplevel(self)
new.title("Child Window")
new.grid()
new._var = IntVar()
new._var.set(0)
new._var.trace("w", new.trace_fun)
new._radioButton = Radiobutton(new, text = "Option 1", variable = new._var, value = 1)
new._radioButton.grid(row=0, column=0, sticky=W, padx=10, pady=10)
new._radioButton2 = Radiobutton(new, text = "Option 2", variable = new._var, value = 2)
new._radioButton2.grid(row=1, column=0, sticky=W, padx=10, pady=10)
new._button = Button(new, text = 'Ok', command=new.destroy)
new._button.grid(row=2, column=0, pady=10)
def trace_fun(new, *args):
print new._var.get()
Parent.classvar = new._var.get()
obj = Parent()
def main():
obj.mainloop()
main()
답장을 보내 주셔서 감사합니다. Toplevel 인스턴스 변수 이름을 new에서 new2로 변경하고 new2에서 trace_fun을 호출하려고했지만 여전히 동일한 오류가 발생합니다. 즉, Toplevel 인스턴스에는 trace_fun 속성이 없습니다. 네가 네가 나에게 제안한 것을 정확히 이해했으면 좋겠어. –
@ J.I.W., 편집 내 대답보기. – 7stud
@ 7stud., 자세한 설명을 읽어 주셔서 감사합니다. 두 프레임의 상호 작용과 관련된 몇 가지 개념을 이해하는 데 도움이되었습니다. –