【发布时间】:2021-12-28 16:29:01
【问题描述】:
我目前有一个下一个切片和上一个切片按钮,可以单击它们以在图像中移动。我还希望键盘左右箭头允许用户浏览上一个和下一个切片。所以应该有两种方法来浏览图像。我无法在prev_image 和next_image 内获得键盘点击工作。
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.canvas.bind('<Left>', self.prev_image)
self.canvas.bind('<Right>', self.next_image)
self.canvas.focus_set()
self.master.bind('<Left>', self.prev_image)
self.master.bind('<Right>', self.next_image)
def prev_image(self, event=None):
print('prev_image')
if event:
print('even:', event)
def next_image(self, event=None):
print('next_image')
if event:
print('even:', event)
root = tk.Tk()
app = App(root)
app.pack()
root.mainloop()
图片:
【问题讨论】:
-
您只需绑定一次。也许使用
self.master.bind()而不是self.canvas.bind()。或者它可能需要在canvas上设置focus()。或者先创建root = tk.Tk(),然后使用root.bind() -
当我删除第二个 self.canvas.bind 并将第一个更改为 self.master.bind() 时,我收到错误消息“next_image() 需要 1 个位置参数但 2被给予”
-
可能先在函数中使用
print(),看看是否执行。也许它运行这些功能,但你可能有不同的问题 - 比如buginPhotoImage -
如果您创建最小的工作代码,我们可以简单地复制和测试它会更简单。当前代码缺少
Canvas、load_image、image_set_rows、current_image_index。 -
请edit 提出您的问题并提供runnable minimal reproducible example 的代码,我相信有人可以提供帮助。
标签: python image user-interface tkinter button