CustomTkinter icon indicating copy to clipboard operation
CustomTkinter copied to clipboard

Idea: ctk_scrollable_frame widget Add option to add both: vertical and horizontal scrolls

Open esaenzzu opened this issue 2 years ago • 2 comments

I'm developing an application where a I need an scrollable widget with horizontal and vertical scrolls This is the code I Had to add in /customtkinter/windows/widgets/ctk_scrollable_frame.py:

diff --git a/customtkinter/windows/widgets/ctk_scrollable_frame.py b/customtkinter/windows/widgets/ctk_scrollable_frame.py index 687f4ad..b802d67 100644 --- a/customtkinter/windows/widgets/ctk_scrollable_frame.py +++ b/customtkinter/windows/widgets/ctk_scrollable_frame.py @@ -36,7 +36,7 @@ class CTkScrollableFrame(tkinter.Frame, CTkAppearanceModeBaseClass, CTkScalingBa label_text: str = "", label_font: Optional[Union[tuple, CTkFont]] = None, label_anchor: str = "center",

  •             orientation: Literal["vertical", "horizontal"] = "vertical"):
    
  •             orientation: Literal["vertical", "horizontal", "both"] = "vertical"):
    
       self._orientation = orientation
    

@@ -57,6 +57,16 @@ class CTkScrollableFrame(tkinter.Frame, CTkAppearanceModeBaseClass, CTkScalingBa self._scrollbar = CTkScrollbar(master=self._parent_frame, orientation="vertical", command=self._parent_canvas.yview, fg_color=scrollbar_fg_color, button_color=scrollbar_button_color, button_hover_color=scrollbar_button_hover_color) self._parent_canvas.configure(yscrollcommand=self._scrollbar.set)

  •    elif self._orientation == "both":
    
  •        self._scrollbar_y = CTkScrollbar(master=self._parent_frame, orientation="vertical",
    
  •                                       command=self._parent_canvas.yview,
    
  •                                       fg_color=scrollbar_fg_color, button_color=scrollbar_button_color,
    
  •                                       button_hover_color=scrollbar_button_hover_color)
    
  •        self._scrollbar_x = CTkScrollbar(master=self._parent_frame, orientation="horizontal",
    
  •                                       command=self._parent_canvas.xview,
    
  •                                       fg_color=scrollbar_fg_color, button_color=scrollbar_button_color,
    
  •                                       button_hover_color=scrollbar_button_hover_color)
    
  •        self._parent_canvas.configure(yscrollcommand=self._scrollbar_y.set, xscrollcommand=self._scrollbar_x.set)
    
       self._label_text = label_text
       self._label = CTkLabel(self._parent_frame, text=label_text, anchor=label_anchor, font=label_font,
    

@@ -115,6 +125,18 @@ class CTkScrollableFrame(tkinter.Frame, CTkAppearanceModeBaseClass, CTkScalingBa self._parent_canvas.grid(row=1, column=0, sticky="nsew", padx=(border_spacing, 0), pady=border_spacing) self._scrollbar.grid(row=1, column=1, sticky="nsew", pady=border_spacing)

  •        if self._label_text is not None and self._label_text != "":
    
  •            self._label.grid(row=0, column=0, columnspan=2, sticky="ew", padx=border_spacing, pady=border_spacing)
    
  •        else:
    
  •            self._label.grid_forget()
    
  •    elif self._orientation == "both":
    
  •        self._parent_frame.grid_columnconfigure(0, weight=1)
    
  •        self._parent_frame.grid_rowconfigure(1, weight=1)
    
  •        self._parent_canvas.grid(row=1, column=0, sticky="nsew", padx=(border_spacing, 0), pady=border_spacing)
    
  •        self._scrollbar_y.grid(row=1, column=1, sticky="nsew", pady=border_spacing)
    
  •        self._scrollbar_x.grid(row=2, column=0, sticky="nsew", padx=border_spacing)
    

I tried to make a pull request but I could not

esaenzzu avatar Jun 26 '23 19:06 esaenzzu

You can also use this CTkXYFrame widget which have both horizontal and vertical scrollbars in the same frame.

Screenshot

Akascape avatar Jul 03 '23 13:07 Akascape

Is there an update of this ?

AnonymousVibrate avatar Nov 29 '24 06:11 AnonymousVibrate