在tkinter中使用鼠标滚轮+滚动条的问题

时间:2017-03-16 09:59:14

标签: python canvas tkinter scrollbar mousewheel

我正在尝试使用tkinter显示图像,我在添加滚动条时遇到问题。如果图像超过窗口大小,我希望能够在水平和垂直方向上滚动鼠标滚轮。问题是当我使用画布时鼠标滚轮不起作用。

在这段代码中,我可以使用鼠标滚轮滚动Y并移动+鼠标滚轮滚动X(这正是我想要的):

import tkinter as tk

master = tk.Tk()

scrollbarX = tk.Scrollbar(master)
scrollbarX.pack(side=tk.BOTTOM, fill=tk.X)
scrollbarY = tk.Scrollbar(master)
scrollbarY.pack(side=tk.RIGHT, fill=tk.Y)

listbox = tk.Listbox(master, yscrollcommand=scrollbarY.set, xscrollcommand=scrollbarX.set)

for i in range(1000):
    listbox.insert(tk.END, str(i)+"-----------------------------------------------------------------------")

listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=tk.YES)

scrollbarX.config(command=listbox.xview, orient=tk.HORIZONTAL)
scrollbarY.config(command=listbox.yview)

master.mainloop()

但是,如果我用画布交换列表框,则mouswheel不再执行任何操作。手动滚动仍然有效:

import tkinter as tk
from PIL import Image, ImageTk

master = tk.Tk()

scrollbarX = tk.Scrollbar(master)
scrollbarX.pack(side=tk.BOTTOM, fill=tk.X)
scrollbarY = tk.Scrollbar(master)
scrollbarY.pack(side=tk.RIGHT, fill=tk.Y)

canvas = tk.Canvas(master, bd=0, xscrollcommand=scrollbarX.set, yscrollcommand=scrollbarY.set)

imagefile = "image.png"
img = ImageTk.PhotoImage(Image.open(imagefile))
canvas.create_image(0,0,image=img, anchor="nw")

canvas.pack(fill=tk.BOTH, expand=tk.YES)

scrollbarX.config(command=canvas.xview, orient=tk.HORIZONTAL)
scrollbarY.config(command=canvas.yview)

canvas.config(scrollregion=canvas.bbox(tk.ALL))

master.mainloop()

我还是编程新手,非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

您需要处理鼠标事件并进行滚动。

你可以通过这样的回调来做到这一点:

canvas

然后将它绑定到canvas.bind_all("<MouseWheel>", on_mousewheel) ,如下所示:

The APK file /path/to/file/app.apk does not exist on disk.
Error while Installing APK