2016-12-20 27 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