2016-12-20 3 views
2

私はSOを初めとしており、プログラミングには新しい経験があります。私は現在GUIを作成するためにTkinterとPythonを試しています。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) 

このコードは、私がログインウィンドウを破壊し、メインアプリケーションウィンドウが開いログイン成功後、うまく動作します。私は他のサンプルGUI年代に私が構築したことに気付きました

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 

:しかし、私は、私は、メインウィンドウが開いている間に(何らかの理由で2回)Enterキーを押すと、私はターミナルで、このメッセージを受け取ることに気付きました同じ方法で入力してもこのエラーは発生しません。私の疑念は、私がキーバインドに何か悪いことをしたことです。このエラーは私のコードに間違っていることを示していますか?それとも、これは何も私は自分自身で心配する必要はありませんか?私のメインアプリケーションは別のクラスのApp(tk.Frame)から実行され、このログインウィンドウはToplevel()ウィジェットです。

私はこのことが重要であるかどうかはわかりませんが、私はこれをMacで実行しています。

私は助けてくれてありがとう! ありがとう!

+0

あなたは既に 'login'clicked'に' Return'をバインドしていますので、既にログインしているときにエラーになる可能性があります...私は、ユーザがログインしているかどうかを確認する別の関数'login_checked'しようとする前に – moogle

+0

私はそれが働くことを確信できません。 login_clickedには、自分のデータベースにあるものに対して入力された資格情報を実行するためのコードがあります。私はログインする前にログインしているかどうかを確認するための関数をどのように作成できるのか分かりません。私のコードが私が想定している方法で書き直すことができます。あなたはあなたが念頭に置いていたことの例を持っていますか?バインディングの背後にあるアイデアは、マウスでクリックして移動するのではなく、ログインボタンをクリックさせることです。 – IFlyLo

+0

私は 'self.login_clicked'のコードはおそらく通常のpythonトレースバックのようには見えないので、確かにあなたの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

関連する問題