pythonでtkinterを使って、GUIを作っているところです。
メインウインドウに表示させているボタンを押すことで、各機能を持ったサブウインドウを表示させ、それぞれの処理をサブウインドウでやるという形のGUIを組んでいるのですが、サブウインドウで処理を呼び出す部分で問題が起きました。
(以下、元コードを簡略して書いてます)
該当のソースコード
python
1import tkinter as tk 2 3 4class Application(tk.Frame): 5 def __init__(self, master=None): 6 super().__init__(master) 7 self.pack() 8 9 master.geometry("300x300") 10 self.debug = tk.Button(text="サブウインドウの形成") 11 self.debug.bind("<1>", Screen.display) 12 self.debug.pack() 13 14 15class Screen: 16 # ディスプレイの表示部分 17 def display(self): 18 sub = tk.Toplevel(root) 19 sub.geometry('200x200') 20 21 self.wbtn = tk.Button(sub, text='関数の実行') 22# 23# ボタンにバインドをすると、ボタンが表示されず、エラーが出る。 24# 25 self.wbtn.bind(sub, "<1>", self.test) 26 self.wbtn.pack() 27 28 def test(self): 29 print('OK!!!') 30 31 32if __name__ == "__main__": 33 root = tk.Tk() 34 app = Application(master=root) 35 app.mainloop()
発生している問題・エラーメッセージ
上記のコードの後半部分の、サブウインドウのボタンから関数を呼び出す部分です。
コードを実行するとボタンがそもそも表示されず、下記のエラーが出ます。
Exception in Tkinter callback Traceback (most recent call last): File "ファイル名", line 1883, in __call__ return self.func(*args) File "ファイル名", line 22, in display self.wbtn.bind(sub, "<1>", self.test) AttributeError: 'Event' object has no attribute 'test'
試したこと
エラーメッセージから属性が参照されてない(属性がない)と書いてあったので明確に、
self.wbtn.bind(sub, "<1>", Screen.test)
と、クラス名もつけて書いてみると、ボタンは表示されるものの、関数testの「OK!!!」が出力されず、
うまくバインドされてないようでした。
補足情報(FW/ツールのバージョンなど)
いろいろググってみましたが、tkinterのGUIもよくわかってない部分があり、解決法がわからず...
よろしくお願いします!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/03 08:30
2020/02/03 08:43
2020/02/03 08:49
2020/02/04 00:17 編集
2020/02/04 00:52 編集
2020/02/04 00:38