Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2 Bugs - Font bug and Custom String Var bug #31

Open
Annajiraochalla opened this issue Apr 4, 2024 · 1 comment
Open

2 Bugs - Font bug and Custom String Var bug #31

Annajiraochalla opened this issue Apr 4, 2024 · 1 comment

Comments

@Annajiraochalla
Copy link

Annajiraochalla commented Apr 4, 2024

Hi @Akascape,

Here is a short example using CTkScrollableDropdown

from CTkScrollableDropdown import *
import customtkinter

root = customtkinter.CTk()

customtkinter.CTkLabel(root, text="Select your favorite month").pack(pady=5)

values = ['January', 'February', 'March', 'April', 
          'May', 'June', 'July', 'August', 'September', 
          'October', 'November', 'December']

variable = customtkinter.StringVar(value = "Month")
combobox = customtkinter.CTkComboBox(root, variable = variable, width=240)
combobox.pack(fill="x", padx=10, pady=10)

CTkScrollableDropdown(combobox, values=values, justify="left", 
                      button_color="transparent", 
                      autocomplete=True, font = ("Consolas", 12))

root.mainloop()

bug 1: Even though we are able to define custom font through **button_kwargs, while performing search operation, the font of the buttons revokes to default font.

bug 2: Generally, we can define custom string var for CTkComboBox and CTkOptionMenu but the CTkScrollableDropdown is kind of overwriting it with the values[0].

@Annajiraochalla
Copy link
Author

The following solution worked for me. @Akascape, please check.

-> Fix for bug 1:

Add button_font in the init method of CTkScrollableDropdown

def __init__(self, attach, x=None, y=None, button_color=None, height: int = 200, width: int = None,
                 fg_color=None, button_height: int = 20, justify="center", scrollbar_button_color=None,
                 scrollbar=True, scrollbar_button_hover_color=None, frame_border_width=2, values=[],
                 command=None, image_values=[], alpha: float = 0.97, frame_corner_radius=20, double_click=False,
                 resize=True, frame_border_color=None, text_color=None, autocomplete=False, button_font = None,
                 hover_color=None, **button_kwargs): 

                self.button_font = button_font

In _init_buttons() method, add the font parameter in CTkButton

self.widgets[self.i] = customtkinter.CTkButton(self.frame,
                                                  text=row,
                                                  height=self.button_height,
                                                  fg_color=self.button_color,
                                                  text_color=self.text_color,
                                                  image=self.image_values[self.i] if self.image_values is not None else None,
                                                  anchor=self.justify,
                                                  hover_color = self.hover_color,
                                                  font = self.button_font,
                                                  command=lambda k=row: self._attach_key_press(k), **button_kwargs)

Add the following if statement in configure() method

if "button_font" in kwargs:
    self.button_font = kwargs.pop("button_font")

-> Fix for bug 2:

Add placeholder_text in the init method of CTkScrollableDropdown

class CTkScrollableDropdown(customtkinter.CTkToplevel):

def __init__(self, attach, placeholder_text = "", x=None, y=None, button_color=None, height: int = 200, width: int = None,
                 fg_color=None, button_height: int = 20, justify="center", scrollbar_button_color=None,
                 scrollbar=True, scrollbar_button_hover_color=None, frame_border_width=2, values=[],
                 command=None, image_values=[], alpha: float = 0.97, frame_corner_radius=20, double_click=False,
                 resize=True, frame_border_color=None, text_color=None, autocomplete=False, button_font = None,
                 hover_color=None, **button_kwargs): 
               
                self.placeholder_text = placeholder_text

In bind_autocomplete() method, change the parameter of self.attach.set()

self.attach.set(self.placeholder_text) #add this line at !ctkcombobox

Add the following if statement in configure() method

if "placeholder_text" not in kwargs:
    kwargs["placeholder_text"] = self.placeholder_text

Example:

CTkScrollableDropdown(month, values = values, placeholder_text = 'Month', justify="left", autocomplete=True, fg_color = 'white',
                        frame_corner_radius = 0, frame_border_width = 1, button_font = ('Segoe UI Light', 20),
                        scrollbar_button_color = '#74d4f7', scrollbar_button_hover_color = '#00B0F0', corner_radius = 0,
                        button_color = 'white', button_height = 40, hover_color= '#74d4f7', hover = True)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant