2017-09-12 6 views
-1

トップレベルウィンドウのエラーを閉じます。Pythonは私が4秒後に自分自身を破壊するだけでなく、ボタンで閉じることができますポップアップエラーウィンドウを作成するには、このコードを望んでいた

def error(self): 
    top = Toplevel() 
    top.after(4000, lambda: top.destroy()) 
    center_window(300,100, top) 
    top.title("Error") 
    Label(top, text="Please enter a valid code", height=3, width=200).pack() 
    ok = Button(top, text="OK", command=top.destroy) 
    ok.pack() 
    ok.bind("<Return>", lambda a: top.destroy()) 
    ok.focus_set() 

私は、コードを実行しているし、時にはそれがこのエラーをスロー以外それは時間の罰金は90%に動作します:

TypeError: <lambda>() takes exactly 1 argument (0 given) 

私はそれがTkintersスレッドであると言う研究を行っています。

top.after(4000, lambda: top.destroy()) 

動作しているようです:私はこのコード行を取るとき、私は、これは私の問題であるかどうかわからないですけど。誰かが私を助けることができたら、私は私がパイソンについて知っていることを教えてきたので、私の学習には穴があると確信しています。私は、このウィンドウを破壊するために何らかの主な実行スレッドを使用する必要があり、そうでなければ私自身のカスタムウィジェットを作成する必要があるかもしれないと思う。どんな助けもありがとうございます。後、またはバインドを使用する場合

+0

これは、スレッドとは全く関係ありません。 Tkinterは常に1つのスレッドで実行されます。 –

答えて

1

、あなたはラムダを使用する必要はありません。 は代わりに、例えば、使用:

top.after(4000, top.destroy) 

直接機能top.destroyを参照しています。

0

あなたは直接の代わりにラムダを使用するので呼び出される関数をバインドすることができます。

top.after(4000, top.destroy) 
... 
    ok.bind("<Return>", top.destroy) 

あなたが関数に引数を渡すために必要な場合には、例えば、ラムダを使用します。これはここでは当てはまりません。

関連する問題