2012-11-26 125 views
0

我試圖創建2個輸入區域(用於登錄和密碼)和確認按鈕(在按下此按鈕後 - 代碼將讀取區域值)的框架。但我不知道如何在課堂上不使用某些全局函數來完成課程App如何正確處理確認事件?

from Tkinter import * 

class App: 

    def __init__(self, master): 

     frame_credentials = Frame(master, width=100, height=200) 
     frame_credentials.pack() 

     self.label_login = Label(frame_credentials, text='login') 
     self.text_login = Entry(frame_credentials, width=15) 
     self.label_pass = Label(frame_credentials, text='password') 
     self.text_pass = Entry(frame_credentials, show="*", width=15) 
     self.button_ok = Button(frame_credentials, text="Login") 

     self.label_login.grid(row=0, column=0) 
     self.text_login.grid(row=1, column=0) 
     self.label_pass.grid(row=2, column=0) 
     self.text_pass.grid(row=3, column=0) 
     self.button_ok.grid(row=0, column=1, rowspan=4) 
     self.button_ok.bind("<Button-1>", enter_in) 

    def enter_in(self): 
     print self.text_login, self.text_pass 

root = Tk() 

app = App(root) 

root.mainloop() 
+2

我不明白你的問題。您的示例代碼不使用任何全局函數。 – Bakuriu

+0

比你運行這個代碼,你會得到錯誤 - 「全球名稱」enter_in'未定義「。如果我將在類App外創建函數「enter_in」 - 它將起作用。但是它如何在類App中使用? – Jurijs

+1

這是因爲它應該是'self.button_ok.bind(「」,self.enter_in)'。你定義了*方法*而不是全局函數。在python中,你*不*具有「隱式自我」,你必須總是引用'self'來訪問實例屬性或方法。 – Bakuriu

回答

0

不要綁定到<Button-1>;而是使用command屬性,併爲其指定對象中方法的名稱。例如:

class App: 
    def __init__(...): 
     ... 
     self.button_ok = Button(..., command=self.enter_in) 
     ... 
    def enter_in(self): 
     <put your login logic here>