Tkinter绑定左右方向键无法触发prev_image、next_image方法问题求解
解决方案
问题根因
你当前使用self.master.bind绑定键盘事件的逻辑,仅在root窗口本身持有焦点时才能触发响应,一旦用户点击过界面内的按钮、画布等子组件,焦点发生转移后,按键绑定就会失效。要实现无论焦点在窗口内哪个位置,都能响应左右方向键的效果,需要改用bind_all方法做全局事件绑定。
修正后代码
import tkinter as tk class App(tk.Frame): def __init__(self, master=None): super().__init__(master) # python3 style self.master.title("Slideshow") top_frame = tk.Frame(self) top_frame.pack() image_frame = tk.Frame(self) image_frame.pack() previous_button = tk.Button(top_frame, text="Previous Slice", command=self.prev_image) previous_button.pack(side="left") next_button = tk.Button(top_frame, text=" Next Slice ", command=self.next_image) next_button.pack(side="left") self.canvas = tk.Canvas(image_frame, bg='red') self.canvas.pack() # 全局绑定按键,无视当前焦点位置 self.bind_all('<Left>', self.prev_image) self.bind_all('<Right>', self.next_image) def prev_image(self, event=None): print('prev_image') if event: print('event:', event) def next_image(self, event=None): print('next_image') if event: print('event:', event) root = tk.Tk() app = App(root) app.pack() root.mainloop()
效果说明
修改后两种操作路径都可以正常生效:点击界面上的上下切片按钮可以切换,按键盘左右方向键也可以触发对应切换逻辑。
内容的提问来源于stack exchange,提问作者newtocoding
相关产品推荐
相关产品推荐

