Tkinter:终端出错,可能来自我的密钥绑定?

时间:2016-12-20 19:13:06

标签: python tkinter

我是SO的新手,也是编程新手。我目前正在尝试使用Tkinter和Python来创建GUI。

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

我的相关代码如下:

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)

此代码工作正常,成功登录后我销毁登录窗口并打开主应用程序窗口。但是我注意到如果我在主窗口打开时按Enter键(由于某种原因两次),我会在终端中收到此消息:

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

我注意到在其他示例图形用户界面中我已经建立了以相同的方式按下输入并不会给我这个错误。我怀疑是我的密钥绑定做错了。这个错误是否表明我的代码有问题?或者这只是我应该担心的事情吗?我的主应用程序是从一个单独的类App(tk.Frame)运行的,这个登录窗口是一个Toplevel()小部件。

我不确定这是否重要,但我在Mac上运行它。

我很感激帮助! 谢谢!

1 个答案:

答案 0 :(得分: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