2014-12-07 92 views
0

出于某种原因,我无法从子窗口中获取条目。 我想从子窗口中获取条目,然后绘制一个矩形。 ,我得到的错误是:X =浮子(self.txtSide.get()) AttributeError的: '主窗口' 对象没有属性 'txtSide'从子窗口获取条目?

import tkinter as tk 
import turtle 
tu=turtle 


class MainWindow(tk.Frame): 
    def __init__(self, *args, **kwargs): 
     tk.Frame.__init__(self, *args, **kwargs) 
     self.button = tk.Button(self, text="Cupe",command=self.Cupe) 
     self.button.pack(side="top") 

    def Cupe(self): 

     c = tk.Toplevel(self) 
     c.wm_title("Cupe") 

     lab=tk.Label(c,text="Side") 
     lab.pack() 

     c.txtSide=tk.Entry(c) 
     c.txtSide.pack() 


     button=tk.Button(c,text="Graph",command=self.graphCupe) 
     button.pack(side="bottom") 


    def graphCupe(self): 
     x=float(self.txtSide.get()) 
     tu.forward(x) 
     tu.left(90) 
     tu.forward(x) 
     tu.left(90) 
     tu.forward(x) 
     tu.left(90) 
     tu.forward(x) 

if __name__ == "__main__": 
    root = tk.Tk() 
    main = MainWindow(root) 
    main.pack(side="top", fill="both", expand=True) 
    root.mainloop() 

回答

1

的问题是,在selfgraphCupeMainWindow实例,而不是子窗口。您需要将子窗口传递给graphCupe函数。这将是做到这一点的一种方法:

def Cupe(self): 
     ... 
     button=tk.Button(c,text="Graph",command=lambda: self.graphCupe(c)) 
     button.pack(side="bottom") 

    def graphCupe(self,window): 
     x=float(window.txtSide.get()) 
     ... 

现在graphCupe函数接受它需要操作的窗口,按钮调用函数,并传递它的子窗口。

+0

当然,另一种解决方案是使'txtSide'属性为'self'('self.txtSide = ...') – 2014-12-07 13:14:22

+0

这也行得通,但如果另一个子窗口打开,它会覆盖属性。然后,如果子窗口1试图调用'graphCupe()',它将使用子窗口2中的'txtSide'属性。 – 2014-12-07 17:16:51