Tkinter - заставить колесико мыши работать с прокручиваемой рамкой в ​​​​Linux

У меня этот код работает правильно в 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) может нуждаться в изменениях, но я не мог понять.


person Val    schedule 27.07.2021    source источник
comment
Посмотрите на это. Работает на Windows 10 и Ubuntu.   -  person TheLizzard    schedule 27.07.2021
comment
Спасибо чувак, это решило мою проблему   -  person Val    schedule 30.07.2021