hi all,
maybe this is stupid question but i cannot catch mousewheel event in Tk.Canvas. I tryied <MouseWheel>, <Button-4>, <4> but without any luck. <1>, <2>, <3> working.
I'm on Win7 Python3.2.
here is my example. Is something wrong in code or i need some magic to catch this event.
thanks.

#encoding: utf-8
from tkinter import *
import tkinter.ttk as ttk
from PIL import Image, ImageTk

class PhotoView(Canvas):
    def __init__(self, parent, **kw):
        self.frame = Frame(parent, bd=2, relief='sunken')
        self.frame.rowconfigure(0, weight=1)
        self.frame.columnconfigure(0, weight=1)

        super().__init__(self.frame)
        Canvas.grid(self, column=0, row=0, sticky='news')

        xscroll = ttk.Scrollbar(self.frame, orient=HORIZONTAL)
        xscroll.grid(column=0, row=1, sticky='we')
        yscroll = ttk.Scrollbar(self.frame, orient=VERTICAL)
        yscroll.grid(column=1, row=0, sticky='sn')

        self.config(width=640,
                    height=480,
                    xscrollcommand=xscroll.set,
                    yscrollcommand=yscroll.set)

        xscroll.config(command=self.xview)
        yscroll.config(command=self.yview)

        # reset coordinate system
        self.xview_moveto(0)
        self.yview_moveto(0)

        # binding
        self.bind('<Configure>', self.make_scroll)
        self.bind('<B3-Motion>', self.drag_image)
        self.bind('<Button-4>', self.zoom_image) # dont work
        self.bind('<MouseWheel>', self.zoom_image) # dont work

        self.focus()

    def drag_image(self, event=None):
        pass

    def make_scroll(self, event=None):
        self.config(scrollregion=self.bbox(ALL))

    def zoom_image(self, event=None):
        print(event)

    def grid(self, **kw):
        self.frame.grid(**kw)

    def pack(self, **kw):
        self.frame.pack(**kw)


class mainGui(Tk):
    def __init__(self):
        super().__init__()

        im = ImageTk.PhotoImage(Image.open('test_img.jpg'))

        c = PhotoView(self)
        c.pack(fill='both', expand='yes')
        c.create_image(0, 0, image=im, anchor='nw')
        c.image = im # keep reference !!

if __name__ == '__main__':
    app = mainGui()
    app.mainloop()

_______________________________________________
Tkinter-discuss mailing list
Tkinter-discuss@python.org
http://mail.python.org/mailman/listinfo/tkinter-discuss

Reply via email to