0
我無法理清如何使自定義小部件接收鼠標滾動事件。如果我綁定到根窗口,則會發生通知。如果我綁定到除窗口小部件以外的根窗口子窗口(這裏是一個簡單的列表框),通知也會發生(通過在移動輪子時觀察列表移動來證明)。我忽略了什麼?在tkinter中,如何使自定義子部件接收鼠標滾動事件?
實施例的代碼,其中輥()從未被調用:
#!/usr/bin/python3
from tkinter import *
from tkinter.ttk import *
class CustomWidget(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.width = 200
self.height = 200
self.canvas = Canvas(self, width=200, height=200)
self.canvas.config(background='red')
self.canvas.pack()
self.bind('<MouseWheel>', self.roll)
self.bind('<Button-4>', self.roll)
self.bind('<Button-5>', self.roll)
def roll(self, event):
print("detected mouse roll!");
if __name__ == "__main__":
root = Tk()
root.wm_title("TestRoot")
sb = Scrollbar(root, orient=VERTICAL)
lb = Listbox(root, yscrollcommand=sb.set)
sb.config(command=lb.yview)
cw = CustomWidget(root)
for char in list("abcdefghijklmnopqrstuvwxyz"):
lb.insert(END, char)
cw.pack()
lb.pack()
sb.pack()
root.update()
root.mainloop()