2014-12-07 38 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