2012-11-26 98 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>