前提
以下ソースコードにてボタンを押してdef 終了()を実行したときとキーボードの2を押してdef 終了()を実行したときで
動作がことなります。
キーボードの2を押してdef 終了()を実行したときはソースコードの一番下にあるprint("終了")が実行される
ボタン2を押してdef 終了()を実行したときはソースコードの一番下にあるprint("終了")が実行されない
なぜ異なるかについての質問と
同じにするためにはどのようにdef 終了()を書けばいいかの質問です。
質問の目的はプログラミングのわからないところを知ることです。
新たにdefを作成してボタンとキー入力で実行されるdefを変える方法は質問の趣旨にそぐわないです。
実現したいこと
- [ ]2を押したときにdef 終了()が実行され、ソースコードの一番下にあるprint("終了")が実行される
- [ ]ボタン2を押したときにdef 終了()が実行され、ソースコードの一番下にあるprint("終了")が実行される
該当のソースコード
python
1import tkinter as tk 2from pynput.keyboard import Key, Listener 3 4class テスト(tk.Frame): 5 def __init__(self, master = None): 6 super().__init__(master) 7 self.master.title("質問用") 8 self.master.geometry("420x640") 9 self.key_listener = Listener(on_press=self.on_press) 10 11 button1 = tk.Button(self.master, 12 font=("", "10"), 13 text="ボタン1", # ボタンの表示名 14 command=lambda: self.on_press("1"), # クリックされたときに呼ばれるメソッド 15 width=10, 16 height=5 17 ) 18 button1.place(x=10, y=10) 19 20 button2 = tk.Button(self.master, 21 font=("", "10"), 22 text="ボタン2", # ボタンの表示名 23 command=lambda: self.on_press("2"), # クリックされたときに呼ばれるメソッド 24 width=10, 25 height=5 26 ) 27 button2.place(x=90, y=10) 28 29 def on_press(self,key): 30 if not type(key) is str: 31 key = key.char 32 if key == "1": 33 __class__.neko() 34 elif key == "2": 35 __class__.終了() 36 37 def 終了(): 38 root.destroy() 39 exit() 40 41 def neko(): 42 print("ねこ") 43 44if __name__ == "__main__": 45 root = tk.Tk() 46 app = テスト(master = root) 47 app.key_listener.start() 48 app.mainloop() 49 app.key_listener.stop() 50 print("終了")
動作時のターミナルのメッセージ
キー入力時
PS C:\Users\hatun\Desktop\pythontest> c:; cd 'c:\Users\hatun\Desktop\pythontest'; & 'C:\Users\hatun\AppData\Local\Programs\Python\Python39\python.exe' 'c:\Users\hatun\.vscode\extensions\ms-python.python-2022.12.1\pythonFiles\lib\python\debugpy\adapter/../..\debugpy\launcher' '63059' '--' 'c:\Users\hatun\Desktop\pythontest\test1.py' 終了 PS C:\Users\hatun\Desktop\pythontest>
ボタン入力時
PS C:\Users\hatun\Desktop\pythontest> c:; cd 'c:\Users\hatun\Desktop\pythontest'; & 'C:\Users\hatun\AppData\Local\Programs\Python\Python39\python.exe' 'c:\Users\hatun\.vscode\extensions\ms-python.python-2022.12.1\pythonFiles\lib\python\debugpy\adapter/../..\debugpy\launcher' '63234' '--' 'c:\Users\hatun\Desktop\pythontest\test1.py' PS C:\Users\hatun\Desktop\pythontest>
補足情報(FW/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー