2016-12-20 26 views
2

我是新手,也是编程新手。我目前正在试验Tkinter和Python来创建一个GUI。Tkinter:终端错误,可能来自我的密钥绑定?

我的问题是有关我在终端得到,而我的程序继续运行不中断的错误消息。

我的相关代码如下:

class LoginWindow(tk.Frame): 

    def __init__(self, master): 
     tk.Frame.__init__(self, master) 
     self.grid() 

     self.label1 = tk.Label(master, text='User Login') 
     self.label1.grid(column=0, row=0, columnspan=3) 
     self.label2 = tk.Label(master, text='User Name:') 
     self.label2.grid(column=0, row=1, sticky=tk.E) 
     self.label3 = tk.Label(master, text='Password:') 
     self.label3.grid(column=0, row=2, sticky=tk.E) 

     self.entry1 = tk.Entry(master) 
     self.entry1.focus_set() 
     self.entry1.grid(column=1, row=1, columnspan=2, padx=10, pady=5) 
     self.entry2 = tk.Entry(master) 
     self.entry2.config(show='*') 
     self.entry2.grid(column=1, row=2, columnspan=2, padx=10, pady=5) 

     self.button1 = tk.Button(master, text='New User', command=self.new_user_clicked) 
     self.button1.grid(column=0, columnspan=2, row=3, padx=(20,0), pady=5) 
     self.button2 = tk.Button(master, text='Login', command=self.login_clicked) 
     master.bind('<Return>', self.login_clicked) 
     self.button2.grid(column=2, row=3, padx=(0,20), pady=5) 

此代码工作得很好,登录成功后,我破坏了登录窗口和主应用程序窗口中打开。不过我注意到,如果我按(出于某种原因两次)进入,而主窗口打开我在终端得到这个消息:

2016-12-20 10:43:31.718 Python[1053:71521] IMKInputSession  
presentFunctionRowItemTextInputViewWithEndpoint:completionHandler: : *NO* NSRemoteViewController to client  
NSError=Error Domain=NSCocoaErrorDomain Code=4099 "The connection from pid 0 was invalidated from this process."  
serInfo={NSDebugDescription=The connection from pid 0 was invalidated from this process.}, com.apple.inputmethod.EmojiFunctionRowItem 

我注意到,在其他样品GUI的我已经建立按相同的方式输入不会给我这个错误。我的怀疑是我的钥匙绑定有问题。这个错误表明我的代码有什么问题吗?或者这只是我应该担心的事情而已?我的主应用程序是从单独的类App(tk.Frame)运行的,并且此登录窗口是Toplevel()小部件。

我不确定这个问题或不,但我在Mac上运行此。

我很感激帮助! 谢谢!

+0

你势必'Return'到'login_clicked'所以它可能示数出来,当你已经登录......我会与检查,如果用户登录另一个函数替换绑定功能在它尝试'login_checked'之前 – moogle

+0

我不太确定我可以让它工作。 login_clicked有我的代码来运行我的数据库中输入的凭据。我不知道如何创建一个函数来查看我是否在登录之前登录。我可以重新编写我想要的代码运行方式。你有没有一个你想到的例子?绑定背后的想法是让它点击登录按钮而不是移动鼠标点击。 – IFlyLo

+0

我想'self.login_clicked'的代码可能与这个问题有关,当然看起来不像普通的python traceback,所以它绝对不是源于你的tkinter代码。 –

回答

0

的问题可能是关键事件仍录,并尝试运行self.login_clicked即使你已经登录

为了解决这个问题,你可以在__init__创建一个变量为这样:

self.is_logged_in = False 

而在self.login_clicked方法中,您现在可以检测用户是否在按下按钮时已经登录。

if self.is_logged_in: 
    print("You are already logged in") 
else: 
    # code to execute when the user logs in 
    self.is_logged_in = True 
+0

完美工作。没有更多的错误信息!谢谢! – IFlyLo