我目前有一個下一個切片和上一個切片按鈕,可以單擊以在影像中移動。我還希望鍵盤的左右箭頭允許用戶瀏覽上一個和下一個切片。所以應該有兩種方法來瀏覽影像。我無法在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()
圖片:

uj5u.com熱心網友回復:
你必須設定focus上canvas得到的鑰匙canvas
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)
第二個版本可能會更好,因為canvas可能會丟失focus- 即。當您使用鍵tab從小部件跳轉到小部件時。
其他問題。
command=需要不獲取引數但bind()需要獲取一個引數的函式 - 因為它發送有關事件的資訊(即按下的鍵、滑鼠位置等)
要在其中使用相同的函式command=,bind()您需要具有默認值的引數 - 即。even=None
def prev_image(self, event=None):
# ... code ...
def next_image(self, event=None):
# ... code ...
最小作業示例:
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')
self.canvas['bg'] = 'blue'
if event:
print('even:', event)
def next_image(self, event=None):
print('next_image')
self.canvas['bg'] = 'green'
if event:
print('even:', event)
if __name__ == "__main__":
app = App()
app.pack()
app.mainloop()
#root = tk.Tk()
#app = App(root)
#app.pack()
#root.mainloop()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/367843.html
上一篇:將狀態變數重置為初始值xcode
