2017-03-16 2 views
1

Ich versuche, Bilder mit tkinter anzuzeigen, und ich habe Probleme beim Hinzufügen einer Bildlaufleiste. Ich würde gerne mit dem Mausrad sowohl horizontal als auch vertikal scrollen können, sollte das Bild die Fenstergröße überschreiten. Das Problem ist, dass das Mausrad nicht funktioniert, wenn ich eine Leinwand verwende.Problem mit Mausrad + Bildlaufleisten in tkinter

in diesem Code i Mausrad können Y bewegen und + Mausrad verschieben X zu bewegen (das ist genau das, was ich will):

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() 

Allerdings, wenn ich die Listbox mit einer Leinwand auszutauschen, die mouswheel macht nichts mehr. Scrollen manuell funktioniert immer noch:

Ich bin noch neu in der Programmierung, jede Hilfe wird sehr geschätzt!

Antwort

1

Sie müssen mit den Mausereignissen umgehen und das Scrollen durchführen.

Das können Sie einen Rückruf wie dies mit:

def on_mousewheel(event): 
    shift = (event.state & 0x1) != 0 
    scroll = -1 if event.delta > 0 else 1 
    if shift: 
     canvas.xview_scroll(scroll, "units") 
    else: 
     canvas.yview_scroll(scroll, "units") 

Dann Sie es canvas wie diese binden:

canvas.bind_all("<MouseWheel>", on_mousewheel) 
+0

Dank. Also ich verstehe, dass es keinen eingebauten Weg gibt, wenn Sie Leinwand benutzen? Weil es mit einer Listbox funktioniert. – dudemeister

+0

Soweit ich mich erinnere, müssen Sie, wenn es um die Leinwand geht, selbst Mausereignisse und ähnliches verbreiten. – Vallentin

+0

Das ist ein Mist. Danke für die Hilfe Jungs. – dudemeister

Verwandte Themen