다음은 필드가 변경 될 때 자체 업데이트되는 채워진 값 형식을 생성하는 데 사용하는 일부 코드의 예입니다. 나는 며칠 동안 다른 클래스의 메서드 내에서 한 클래스의 변수를 호출하고 실험 해 보았습니다. 내가이 방법으로 시도하는 이유는 약 30 개의 섹션으로 끝날 것이므로 코드를 모듈화하고 읽기 쉽도록 만드는 것입니다. 또한, 일반적으로 개체 이름을 지정할 때 일반적으로 숫자를 사용하지 않습니다.Interclass 변수 참조
from tkinter import *
from tkinter import ttk
class Application(ttk.Frame):
def __init__(self, master=None):
ttk.Frame.__init__(self, master)
self.grid()
Frame1()
Frame2()
Frame3()
class Frame1(ttk.Frame):
def __init__(self, master=None):
ttk.Frame.__init__(self, master)
self.grid()
ttk.Label(self, text="Frame1").grid()
self.var1 = IntVar()
self.SetVar1()
ttk.Label(self, textvariable=self.var1).grid()
def SetVar1(self):
self.var1.set(2)
class Frame2(ttk.Frame):
def __init__(self, master=None):
ttk.Frame.__init__(self, master)
self.grid()
ttk.Label(self, text="Frame2").grid()
self.var2 = IntVar()
self.SetVar2()
ttk.Label(self, textvariable=self.var2).grid()
def SetVar2(self):
self.var2.set(3)
class Frame3(ttk.Frame):
def __init__(self, master=None):
ttk.Frame.__init__(self, master)
self.grid()
ttk.Label(self, text="Frame3").grid()
self.var3 = IntVar()
self.SetVar3()
ttk.Label(self, textvariable=self.var3).grid()
def SetVar3(self):
self.var3.set(Frame1.var1.get() + Frame2.var2.get())
app = Application()
app.master.title("Window")
app.mainloop()
def SetVar3(self):
self.var3.set(Frame1.var1.get() + Frame2.var2.get())
에 대한 오류가 발생한 코드의 아래쪽으로
과 나는 과거를 얻을 수 없습니다. 분명히 이런 식으로 var1을 호출 할 수 없습니다. 다음과 같은 오류가 발생합니다.
AttributeError: type object 'Frame1' has no attribute 'var1'
제대로 실행되면, 코드가 유사합니다
그래서Frame1
2
Frame2
3
Frame3
5
, 내가 무엇을 놓치고?
(잠시 후 코멘트가 있었지만 이후 사라져서이 주제에 관해 토론하는 데 도움이됩니다. 잠시 후 다시 돌아올 것입니다. 아래의 설명은 마술처럼 다시 나타납니다.
하나의 의견은 Frame3을 호출하기 위해 Frame1과 Frame2의 새 인스턴스를 만드는 것에 대해 언급했지만 이러한 새 인스턴스가 Application에서 이미 초기화 된 인스턴스의 값을 공유하지 않으면 도움이되지 않습니다. 코드에 오류가 있지만 자세히 설명하지 않았습니다.
각 댓글에 응답하는 동안 각 댓글이 사라지고 원본을 편집 할 수있는 경고가 표시되었습니다. 대신 게시하십시오. 의견의 요지를 놓쳤습니까?)
감사합니다. 나는 f1, f2, f3을 고려해 보았지만 그런 식으로 Frame3에 전달하지 않았습니다. 나는 그것을 시도 할 것이다. –