2016-01-23 64 views
-1

有问题的部分是我要求用户输入一个类, 我希望使用从另一个类中的该条目获得的值, 但是,无论如何,此代码总是给我0已进入。 我认为这可能是因为当另一个类被执行时,存储在前一个类的入口中的值消失。但我不知道如何去解决它。 任何编码大师能帮我一点点吗?如何将Tkinter中的某个条目的值传递给另一个类?

...... 

class PageOne(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self,parent) 
     BackButton = tk.Button(self, text="Back",font=TNR24,command=lambda: controller.show_frame(MainPage)) 
     PrintButton = tk.Button(self, text="Print it", command=self.print_message) 
     ExitButton = tk.Button(self,text="EXIT",command=exit_window) 
     ProceedButton=tk.Button(self, text="Proceed", command=lambda: controller.show_frame(PageTwo)) 
     self.NumOfVertices= tk.IntVar() 
     global VertexNumber 
     VertexNumber=self.NumOfVertices.get() 
     NumOfVerticesEntry=tk.Entry(self,textvariable=self.NumOfVertices) 
     ProceedButton.pack() 
     BackButton.pack() 
     ExitButton.place(x=1240, y=670, width=40, height=30) 
     PrintButton.pack() 
     NumOfVerticesEntry.pack() 

    def print_message(self): 
     print self.NumOfVertices.get() 


class PageTwo(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self,parent) 

     lable=tk.Label(self,text=VertexNumber) 

...... 

代码很长,所以我只拿了我需要帮助的部分。 VertexNumber是我想要在类Pagetwo中存储和使用的变量。 但无论我输入什么,它总是变为0。 用户输入后是否有任何方法可以永久保存该变量?

+1

此问题是http://stackoverflow.com/q/32212408/7432的副本。 –

回答

1

你可以做NumOfVertices一个全局变量,并调用NumOfVertices.get()PageTwo得到IntVar当前值

NumOfVertices = tk.IntVar() 


class PageOne(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     ... 
     NumOfVerticesEntry = tk.Entry(self, textvariable=NumOfVertices) 

    def print_message(self): 
     print NumOfVertices.get() 


class PageTwo(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     VertexNumber = NumOfVertices.get() 
     label = tk.Label(self, text=VertexNumber) 

另外,避免了全局变量,你可以做NumOfVerticesPageOne实例的属性 。

然后,当您实例化PageTwo时,还要传递PageOne的实例,以便查找其NumOfVertices属性。

class PageOne(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     ... 
     self.NumOfVertices = tk.IntVar() 
     NumOfVerticesEntry = tk.Entry(self, textvariable=self.NumOfVertices) 

    def print_message(self): 
     print self.NumOfVertices.get() 


class PageTwo(tk.Frame): 

    def __init__(self, parent, controller, pageone): 
     tk.Frame.__init__(self, parent) 
     VertexNumber = pageone.NumOfVertices.get() 
     label = tk.Label(self, text=VertexNumber) 
+0

第二种方法会导致有4个参数但预期只有3个错误的错误,有没有解决这个问题的方法? –

+0

我想我定义了前面的“def __init __(self,* args,** kwargs):”在代码的基础上, –

+0

当你实例化'PageTwo'时,一定要将它传递给'PageOne'的实例。 – unutbu