2016-02-28 31 views
-1

更新嘗試學習Python,NameError:全局名稱 '控制器' 沒有定義

Exception in Tkinter callback Traceback (most recent call last): File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 1536, in call return self.func(*args) File "tk_cp_successful.py", line 143, in command=lambda: controller.show_frame(StartPage))

我的錯誤是

NameError: global name 'controller' is not defined

class LoginPage(tk.Frame): 
    def __init__(self, parent, controller): 
     global entry_1 
     global entry_2 
     tk.Frame.__init__(self, parent) 
     label = tk.Label(self, text="test page") 
     label.pack(pady=20,padx=20) 

     label_1 = Label(self, text="Username") 
     label_1.pack() 
     label_2 = Label(self, text="Password") 
     label_2.pack() 
     entry_1 = Entry(self) 
     entry_1.pack() 
     entry_2 = Entry(self, show="*") 
     entry_2.pack() 
     label_1.grid(row=0, sticky=E) 
     label_1.pack() 
     label_2.grid(row=1, sticky=E) 
     label_2.pack() 
     entry_1.grid(row=0, column=1) 
     entry_1.pack() 
     entry_2.grid(row=1, column=1) 
     entry_2.pack() 
     checkbox = Checkbutton(self, text="Keep me logged in") 

     checkbox.grid(columnspan=2) 
     checkbox.pack() 
     logbtn = Button(self, text="Login", command = self.tested) 
     logbtn.grid(columnspan=2) 
     logbtn.pack() 


    def tested(self): 
     #print("Clicked") 
     username = entry_1.get() 
     password = entry_2.get() 

     #print(username, password) 

     if username == "test" and password == "test": 
      #box.showinfo("Login successful", "Welcome test") 
      button1 = ttk.Button(self, text="Back to new page", command=lambda: controller.show_frame(newPage)) 
      button1.pack() 
     else: 
      box.showerror("Login failed", "Incorrect username") 
+1

'controller'不在「範圍內」。您將它作爲參數傳遞給類,但您需要將其分配給一個字段以在另一個方法中使用它 –

+0

這是類------------ class LoginPage(tk.Frame) : DEF __init __(個體,父母,控制器): 全球entry_1 全球ENTRY_2 tk.Frame .__初始化__(個體,父母) 標記= tk.Label(個體,文本= 「第一頁」) label.pack( pady = 10,padx = 10) label_1 =標籤(個體,文本= 「用戶名」) label_1.pack() label_2 =標籤(個體,文本= 「密碼」) label_2.pack() entry_1 =條目(個體) entry_1.pack() – jack

+1

請不要'不要使用註釋代碼。正如你所看到的,它看起來很糟糕 –

回答

0

您需要將控制器保存到一個成員變量/領域。

class LoginPage(tk.Frame): 
    def __init__(self, parent, controller): 
     self.controller = controller 
     # other code 

    def tested(self): 
     # other code 
     # access with self.controller 
+0

非常感謝你的幫助。在我改變成員變量之後,並且和self.controller一起使用。有效。真的很高興知道 – jack

+0

對不起?改變什麼? –

+0

我可以有一個新的頁面彈出。 – jack

相關問題