У меня этот код работает правильно в Windows:
from tkinter import *
from tkinter import ttk
def _on_mouse_wheel(event):
my_main_canvas.yview_scroll(-1 * int((event.delta / 120)), "units")
window = Tk()
main_frame = Frame(window)
main_frame.pack(fill=BOTH, expand=YES)
my_main_canvas = Canvas(main_frame)
my_main_canvas.pack(side=LEFT, fill=BOTH, expand=YES)
my_main_scrollbar = ttk.Scrollbar(main_frame, orient=VERTICAL, command=my_main_canvas.yview)
my_main_scrollbar.pack(side=RIGHT, fill=Y)
my_main_canvas.configure(yscrollcommand=my_main_scrollbar.set)
my_main_canvas.bind('<Configure>', lambda e: my_main_canvas.configure(scrollregion = my_main_canvas.bbox("all")))
my_main_canvas.bind_all("<MouseWheel>", _on_mouse_wheel)
new_main_frame = Frame(my_main_canvas, relief=SUNKEN)
my_main_canvas.create_window((0,0), window=new_main_frame, anchor="center", width=window.winfo_screenwidth()-30)
for i in range(100):
Label(new_main_frame, text=f"Label {i+1}").pack()
window.mainloop()
Я хотел бы сделать версию для Linux. Моя проблема в том, что я не могу прокрутить колесиком мыши.
Я обнаружил, что бидинги должны быть с <Button-4>
и <Button-5>
вместо <MouseWheel>
, а функция _on_mouse_wheel(event)
может нуждаться в изменениях, но я не мог понять.