mam ten zwój-stanie ramki (ramki wewnątrz płótnie faktycznie).Python tkinter mouseWheel wiązania się pasek przewijania
import Tkinter as tk
class Scrollbarframe():
def __init__(self, parent,xsize,ysize,xcod,ycod):
def ScrollAll(event):
canvas1.configure(scrollregion=canvas1.bbox("all"),width=xsize,height=ysize,bg='white')
self.parent=parent
self.frame1=tk.Frame(parent,bg='white')
self.frame1.place(x=xcod,y=ycod)
canvas1=tk.Canvas(self.frame1)
self.frame2=tk.Frame(canvas1,bg='white',relief='groove',bd=1,width=1230,height=430)
scrollbar1=tk.Scrollbar(self.frame1,orient="vertical",command=canvas1.yview)
canvas1.configure(yscrollcommand=scrollbar1.set)
scrollbar1.pack(side="right",fill="y")
canvas1.pack(side="left")
canvas1.create_window((0,0),window=self.frame2,anchor='nw')
self.frame2.bind("<Configure>",ScrollAll)
chciałbym związać kółka myszy do przewijania, dzięki czemu użytkownik może przewijać ramki bez konieczności korzystania z przycisków strzałek na pasku przewijania. Po rozglądając się, dodałem wiążący do mojego canvas1
jak ten
self.frame1.bind("<MouseWheel>", self.OnMouseWheel)
Jest to funkcja:
def OnMouseWheel(self,event):
self.scrollbar1.yview("scroll",event.delta,"units")
return "break"
Ale pasek przewijania nie ruszy, kiedy mogę używać kółka myszy. Czy ktoś może mi w tym pomóc? Wszystko, czego chcę, to gdy użytkownik używa koła myszy (w obszarze ramki/na pasku przewijania), płótno powinno automatycznie przewijać w górę lub w dół.
Doskonała odpowiedź dla początkujących, takich jak ja. dzięki –
Próbowałem użyć tego (Linux tutaj), ale couldnt to działa, aż zauważyłem, że - Zastanawiam się, dlaczego - event.delta było zawsze zero. Rozwiązano, nazywając po prostu yview_scroll (kierunek, "jednostki") – alessandro
@Bryan Oakley - Powyższe działa dobrze, jeśli w aplikacji jest tylko jedno przewijane płótno. Ale jeśli są dwa lub więcej, w jaki sposób można ograniczyć przewijanie do jednego lub drugiego? – JDM