From 344b30e68420c80dc2f2de97c44e87710864bb6e Mon Sep 17 00:00:00 2001 From: tschiman Date: Tue, 11 Jul 2023 14:15:06 +0200 Subject: [PATCH] fixed scrollable frame mouse wheel on linux #1356 --- .../windows/widgets/ctk_scrollable_frame.py | 15 ++++++++++++--- .../test_scrollable_frame.py | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/customtkinter/windows/widgets/ctk_scrollable_frame.py b/customtkinter/windows/widgets/ctk_scrollable_frame.py index 685deb2..20b3a68 100644 --- a/customtkinter/windows/widgets/ctk_scrollable_frame.py +++ b/customtkinter/windows/widgets/ctk_scrollable_frame.py @@ -74,7 +74,13 @@ class CTkScrollableFrame(tkinter.Frame, CTkAppearanceModeBaseClass, CTkScalingBa self.bind("", lambda e: self._parent_canvas.configure(scrollregion=self._parent_canvas.bbox("all"))) self._parent_canvas.bind("", self._fit_frame_dimensions_to_canvas) - self.bind_all("", self._mouse_wheel_all, add="+") + + if "linux" in sys.platform: + self.bind_all("", self._mouse_wheel_all, add="+") + self.bind_all("", self._mouse_wheel_all, add="+") + else: + self.bind_all("", self._mouse_wheel_all, add="+") + self.bind_all("", self._keyboard_shift_press_all, add="+") self.bind_all("", self._keyboard_shift_press_all, add="+") self.bind_all("", self._keyboard_shift_release_all, add="+") @@ -243,6 +249,8 @@ class CTkScrollableFrame(tkinter.Frame, CTkAppearanceModeBaseClass, CTkScalingBa self._parent_canvas.configure(xscrollincrement=1, yscrollincrement=1) elif sys.platform == "darwin": self._parent_canvas.configure(xscrollincrement=4, yscrollincrement=8) + else: + self._parent_canvas.configure(xscrollincrement=30, yscrollincrement=30) def _mouse_wheel_all(self, event): if self.check_if_master_is_canvas(event.widget): @@ -263,10 +271,11 @@ class CTkScrollableFrame(tkinter.Frame, CTkAppearanceModeBaseClass, CTkScalingBa else: if self._shift_pressed: if self._parent_canvas.xview() != (0.0, 1.0): - self._parent_canvas.xview("scroll", -event.delta, "units") + self._parent_canvas.xview_scroll(-1 if event.num == 4 else 1, "units") else: if self._parent_canvas.yview() != (0.0, 1.0): - self._parent_canvas.yview("scroll", -event.delta, "units") + self._parent_canvas.yview_scroll(-1 if event.num == 4 else 1, "units") + def _keyboard_shift_press_all(self, event): self._shift_pressed = True diff --git a/test/manual_integration_tests/test_scrollable_frame.py b/test/manual_integration_tests/test_scrollable_frame.py index c7c0127..a5a377a 100644 --- a/test/manual_integration_tests/test_scrollable_frame.py +++ b/test/manual_integration_tests/test_scrollable_frame.py @@ -26,7 +26,7 @@ frame_4.configure(label_text="CTkScrollableFrame") frame_5 = customtkinter.CTkScrollableFrame(app, orientation="vertical", label_text="CTkScrollableFrame", corner_radius=0) frame_5.grid(row=0, column=2, rowspan=2, sticky="nsew") -for i in range(100): +for i in range(20): customtkinter.CTkCheckBox(frame_1).grid(row=i, padx=10, pady=10) customtkinter.CTkCheckBox(frame_2).grid(row=i, padx=10, pady=10) customtkinter.CTkCheckBox(frame_3).grid(row=0, column=i, padx=10, pady=10)