我是新手,也是编程新手。我目前正在试验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上运行此。
我很感激帮助! 谢谢!
你势必'Return'到'login_clicked'所以它可能示数出来,当你已经登录......我会与检查,如果用户登录另一个函数替换绑定功能在它尝试'login_checked'之前 – moogle
我不太确定我可以让它工作。 login_clicked有我的代码来运行我的数据库中输入的凭据。我不知道如何创建一个函数来查看我是否在登录之前登录。我可以重新编写我想要的代码运行方式。你有没有一个你想到的例子?绑定背后的想法是让它点击登录按钮而不是移动鼠标点击。 – IFlyLo
我想'self.login_clicked'的代码可能与这个问题有关,当然看起来不像普通的python traceback,所以它绝对不是源于你的tkinter代码。 –