前提
tkinter をエラーなく、×ボタンで閉じたいです。
実現したいこと
mainloopを使わず、whileとupdateでtkinterのウィンドウを立ち上げて、×ボタンで終了したいです。
whileとupdateで代用する理由はウィンドウの内容を条件によって更新したいからです。
該当のソースコードではシンプルに白から白に更新しています。(本来はいろんな条件分岐します。)
発生している問題・エラーメッセージ
File "D:(割愛)\benkyo.py", line 38, in <module> btn[i]['bg']='white' File "C:\Users\namae\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1657, in __setitem__ self.configure({key: value}) File "C:\Users\namae\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1646, in configure return self._configure('configure', cnf, kw) File "C:\Users\namae\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1636, in _configure self.tk.call(_flatten((self._w, cmd)) + self._options(cnf)) _tkinter.TclError: invalid command name ".!canvas.!button"
該当のソースコード
実際は500行以上にわたるコードなので、シンプルにして必要なところだけ記載します。
python
1import tkinter as tk 2 3root = tk.Tk() 4label = tk.Label(root, text="-") 5label.pack() 6root.geometry('1920x1080') 7canvas = tk.Canvas( 8 root, 9 width = 1920, # 水平サイズ 10 height = 500, # 垂直サイズ 11) 12canvas.pack() # 配置 13 14 15for i in range(18): 16 btn={ 17 i:[], 18 } 19 20for i in range(6): 21 btn[i]=tk.Button(canvas, text="", width=25,font=("MSゴシック", "16")) 22 btn[i+6]=tk.Button(canvas, text="", width=25,font=("MSゴシック", "16")) 23 btn[i+12]=tk.Button(canvas, text="", width=25,font=("MSゴシック", "16")) 24 btn[i+18]=tk.Button(canvas, text="", width=25,font=("MSゴシック", "16")) 25 btn[i].grid(row=0,column=i) 26 btn[i+6].grid(row=1,column=i) 27 btn[i+12].grid(row=2,column=i) 28 btn[i+18].grid(row=3,column=i) 29 30def close_window(): 31 root.destroy() 32 33button = tk.Button(text = "Click and Quit", command = close_window) 34button.pack() 35 36while True: 37 for i in range(24): 38 btn[i]['bg']='white' 39 label.update() 40
試したこと
下記コードを追記して閉じてみましたがやはりエラーになります。
def close_window(): root.destroy() button = tk.Button(text = "Click and Quit", command = close_window) button.pack()
原因と対策わかる方いましたら教えてください。
invalid command nameでググっても有効な対策を見つけられませんでした。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/09/13 16:45