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

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

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

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

Tkinter

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

Q&A

2回答

10670閲覧

tkinter実行時の警告文「invalid command name ".!button"」

takashim

総合スコア124

Python 3.x

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

Tkinter

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

0グッド

0クリップ

投稿2020/02/07 06:56

編集2020/02/07 07:00

前提・実現したいこと

計算条件を入力するボックスをtkinterで作っています。
2段階での入力としたいのですが、2回目のボックスが出る際にターミナルに以下の警告文が出ます。
計算が止まるわけでもなくそのまま動くのですがちょっと気持ち悪いので解消したいです。
なかなか情報が見つからず、ご教授いただきたいです。

発生している問題・エラーメッセージ

invalid command name ".!button" while executing "$w cget -state" (procedure "tk::ButtonDown" line 12) invoked from within "tk::ButtonDown .!button" (command bound to event)

該当のソースコード

簡略化のため2つのボックスとも入力条件を1項目のみとしていますが、実際はもっと多くて項目数も違います。

python3.7.1

1import tkinter 2import tkinter.messagebox 3 4def applyFinishOne(event): 5 6 global Entry_de_val 7 8 Entry_de_val = Entry_de.get() 9 root4.destroy() 10 11 12def settingOne(): 13 14 global Entry_de 15 global root4 16 17 root4 = tkinter.Tk() 18 root4.title('計算条件1') 19 root4.geometry('600x300') 20 root4.attributes('-topmost', True) 21 ### ラベル 22 Static_de = tkinter.Label(text='条件1 (m)') #文字の背景色 23 Static_de.place(x=10, y=10) #指定位置に 24 ### Entry 25 Entry_de = tkinter.Entry(width=30) 26 Entry_de.insert(tkinter.END, '0.6') 27 Entry_de.place(x=150, y=10) 28 ### ボタン 29 Button_sta = tkinter.Button(text='適用して実行', width=10) 30 Button_sta.bind('<Button-1>', applyFinishOne) 31 Button_sta.place(x=310, y=150) 32 33 root4.mainloop() 34 35 return Entry_de_val, 36 37 38def applyFinishTwo(event): 39 40 global Entry1_val 41 42 Entry1_val = Entry1.get() 43 root2.destroy() 44 45 46def settingTwo(): 47 48 global Entry1 49 global root2 50 51 root2 = tkinter.Tk() 52 root2.title('計算条件2') 53 root2.geometry('600x300') 54 root2.attributes('-topmost', True) 55 ### ラベル 56 Static1 = tkinter.Label(text='計算条件2') 57 Static1.place(x=10, y=10) 58 ### Entry 59 Entry1 = tkinter.Entry(width=30) 60 Entry1.insert(tkinter.END, '3000') 61 Entry1.place(x=150, y=10) 62 ### Button 63 Button3 = tkinter.Button(text='適用して実行', width=10) 64 Button3.bind('<Button-1>', applyFinishTwo) 65 Button3.place(x=310, y=150) 66 67 root2.mainloop() 68 69 return Entry1_val, 70 71 72print(settingOne()) 73print(settingTwo())

補足情報(FW/ツールのバージョンなど)

tk 8.6.8

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

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

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

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

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

guest

回答2

0

当時私も同じ問題を抱えていましたが、それを解決する方法は単にそれを削除することでした。
mario games

投稿2024/01/26 06:56

peellabele

総合スコア2

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

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

0

以下のようにButtonのコードを変更し、コマンド関数の引数から(event)を削除すると警告が出なくなりました。
とりあえず解決しましたが、勉強のためにも原因が判る方がいらっしゃいましたらご教授いただきたいです。

Button_sta = tkinter.Button(text='適用して実行', width=10) Button_sta.bind('<Button-1>', applyFinishOne) #↓ Button_sta = tkinter.Button(text='適用して実行', width=10, command=applyFinishOne)

投稿2020/02/07 07:32

takashim

総合スコア124

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問