我是新手,也是編程新手。我目前正在試驗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代碼。 –