質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Q&A

解決済

1回答

8439閲覧

バインドの解除

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

0グッド

0クリップ

投稿2017/01/04 13:05

###前提・実現したいこと
Python・Tkinterで簡単なアプリケーションを作成していて、下記の様なコードを書きました。特にエラー等はないのですが、一度root.bind('<Return>',erase)と指定すると何度もerase()が実行されます。一度エンターキーを押したらバインドが解除できる方法(関数)はないでしょうか。ご教示お願い致します。

###該当のソースコード

Python

1from tkinter import * 2root=Tk() 3 4def erase(event=None): 5 button.destroy() 6 label=Label(root,text='正常に消去されました',width=54,height=3,bg='#0000ff') 7 label.pack() 8 9button=Button(root,text='click',command=erase,width=10,height=1,bg='#ff0000') 10button.pack() 11 12root.bind('<Return>',erase)

###試したこと
関数erase()の次に、ただパスするだけの関数bind_off()を定義してみましたが、あまり効率的ではないと個人的に感じています。

Python

1def erase(event=None): 2 root.bind('<Return>',bind_off) 3 button.destroy() 4 label=Label(root,text='正常に消去されました',width=54,height=3,bg='#0000ff') 5 label.pack() 6 7def bind_off(event=None): 8 pass

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ボタンをdestroy()する意図がよくわかりません (なくなってしまえばバインド解除の意味がないような)。

それはともかく、バインドを解除するよりもウィジェトを無効化する方がいいと思います。ウィジェトが本当にクリック不可能になり、視覚的にもそのことがわかりますから。

python

1def erase(): 2 button.config(state='disabled') 3... 4

また、root.bind()ではerase()を直接呼ぶのではなく、buttonのイベントを呼び出すようにすれば、ボタンが無効化されていルときにイベントが実行されません。

python

1root.bind('<Return>', (lambda e: button.invoke()))

投稿2017/01/06 06:40

編集2017/01/06 07:05
ikedas

総合スコア4229

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/01/06 07:03

とても効率がよく見えます。 今後ウィジェットについて詳しく調べてみます。 ありがとうございました。
ikedas

2017/01/06 07:06

終了後にすみません。ご質問の要点の「<Return>で何度でもイベント実行される」というところが抜けていたので、回答に加筆しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問