TomSchimansky / CustomTkinter

A modern and customizable python UI-library based on Tkinter
MIT License
11.22k stars 1.07k forks source link

Login form - entries without borders #2153

Closed 1saquee closed 8 months ago

1saquee commented 8 months ago

using customtkinter Is it possible to create an entry without borders or background colors? Captura de Tela (3) like the one in the image

dipeshSam commented 8 months ago

using customtkinter Is it possible to create an entry without borders or background colors? Captura de Tela (3) like the one in the image

Yes, definitely. Set the foreground color transparent (or to the background color) along with border color. It will look like the image you have provided.

I have created a class CTkLinedEntry can create such effects. Works well with both light and dark modes. It has following extra properties: bottom_line_color: str | tuple[str, str] = None - Initially none for auto coloring of bottom line.

Light Mode: ctk_linedentry

Dark Mode: ctk_linedentry_dark

Code:

from customtkinter import (
    CTk,
    CTkEntry,
    CTkLabel,
    CTkButton,
    CTkFont,
    CTkFrame,
    Variable,
)

from customtkinter import set_appearance_mode

class CTkLinedEntry(CTkEntry):
    def __init__(self,
        master: any,
        width: int = 140,
        height: int = 28,
        bg_color: str | tuple[str, str] = "transparent",
        text_color: str | tuple[str, str] | None = None,
        placeholder_text_color: str | tuple[str, str] | None = None,
        textvariable: Variable | None = None,
        placeholder_text: str | None = None,
        font: tuple | CTkFont | None = None,
        state: str = "normal",
        bottom_line_color: str | tuple[str, str] = None, 
        **kwargs):

        fg_color = "transparent"
        border_width = 0
        corner_radius = 0
        border_color = None
        super().__init__(master, width, height, corner_radius, border_width, bg_color, fg_color, border_color, text_color, placeholder_text_color, textvariable, placeholder_text, font, state, **kwargs)

        self.bottom_line_color = bottom_line_color
        self.width = width
        self.height = height
        self._draw_bottom_line()

    def _draw_bottom_line(self):
        if self.bottom_line_color:
            if isinstance(self.bottom_line_color, str):
                self._canvas.configure(background=self.bottom_line_color)
            elif isinstance(self.bottom_line_color, tuple):
                self._set_bottom_line_color()
        else:
            self.bottom_line_color = "black", "white"
            self._set_bottom_line_color()

        self._entry.grid_configure(padx=0)

    def _set_bottom_line_color(self):
        if self._get_appearance_mode() == "light":
            self._canvas.configure(background=
                self.bottom_line_color[0])
        else:
            self._canvas.configure(background=
                self.bottom_line_color[1])

if __name__ == "__main__":
    app = CTk()
    app.geometry("500x400")
    app.grid_columnconfigure(0, weight=1)
    set_appearance_mode("light")

    header = CTkLabel(app, text="Sign in", text_color="#70b0f8", font=CTkFont(weight="bold", size=25))
    header.grid(row=0, column=0, padx=50, pady=20, sticky="ew")

    entry1 = CTkLinedEntry(app, placeholder_text="Username")
    entry1.grid(row=1, column=0, padx=50, pady=10, sticky="ew")

    entry2 = CTkLinedEntry(app, placeholder_text="Password")
    entry2.grid(row=2, column=0, padx=50, pady=10, sticky="ew")

    button_signin = CTkButton(app, text="Sign in", corner_radius=0, fg_color="#70b0f8")
    button_signin.grid(row=3, column=0, padx=80, pady=10, sticky="ew")

    # Adding extra functionality
    buttom_frame_text = CTkFrame(app, fg_color="transparent")
    buttom_frame_text.grid_columnconfigure((0, 1), weight=1)
    CTkLabel(buttom_frame_text, text="Don't have an account?").grid(row=0, column=0, sticky="e")
    CTkButton(buttom_frame_text, text="Sign up", fg_color="transparent", width=0, hover=False,
        command=lambda: print("New Sign up requested!"), text_color="#70b0f8").grid(row=0, column=1, sticky="w")
    buttom_frame_text.grid(row=4, column=0, pady=10, sticky="ew")

    app.mainloop()

You can also set the color of bottom line or different colors for different mode by providing tuple of two colors. Other properties are same as the normal entry box has.

Hope, it will be helpful for you. Happy customtkinter :)

1saquee commented 8 months ago

usando o customtkinter É possível criar uma entrada sem bordas ou cores de fundo? como o da imagem Captura de Tela (3)

Sim, definitivamente. Defina a cor do primeiro plano como transparente (ou como cor de fundo) junto com a cor da borda. Será semelhante à imagem que você forneceu.

Eu criei uma classe CTkLinedEntry que pode criar tais efeitos. Funciona bem com os modos claro e escuro. Possui as seguintes propriedades extras: bottom_line_color: str | tuple[str, str] = None - Inicialmente nenhuma para coloração automática dos resultados financeiros.

Modo de luz: ctk_linedentry ctk_linedentry

Modo escuro: ctk_linedentry_dark ctk_linedentry_dark

Código:

from customtkinter import (
    CTk,
    CTkEntry,
    CTkLabel,
    CTkButton,
    CTkFont,
    CTkFrame,
    Variable,
)

from customtkinter import set_appearance_mode

class CTkLinedEntry(CTkEntry):
    def __init__(self,
        master: any,
        width: int = 140,
        height: int = 28,
        bg_color: str | tuple[str, str] = "transparent",
        text_color: str | tuple[str, str] | None = None,
        placeholder_text_color: str | tuple[str, str] | None = None,
        textvariable: Variable | None = None,
        placeholder_text: str | None = None,
        font: tuple | CTkFont | None = None,
        state: str = "normal",
        bottom_line_color: str | tuple[str, str] = None, 
        **kwargs):

        fg_color = "transparent"
        border_width = 0
        corner_radius = 0
        border_color = None
        super().__init__(master, width, height, corner_radius, border_width, bg_color, fg_color, border_color, text_color, placeholder_text_color, textvariable, placeholder_text, font, state, **kwargs)

        self.bottom_line_color = bottom_line_color
        self.width = width
        self.height = height
        self._draw_bottom_line()

    def _draw_bottom_line(self):
        if self.bottom_line_color:
            if isinstance(self.bottom_line_color, str):
                self._canvas.configure(background=self.bottom_line_color)
            elif isinstance(self.bottom_line_color, tuple):
                self._set_bottom_line_color()
        else:
            self.bottom_line_color = "black", "white"
            self._set_bottom_line_color()

        self._entry.grid_configure(padx=0)

    def _set_bottom_line_color(self):
        if self._get_appearance_mode() == "light":
            self._canvas.configure(background=
                self.bottom_line_color[0])
        else:
            self._canvas.configure(background=
                self.bottom_line_color[1])

if __name__ == "__main__":
    app = CTk()
    app.geometry("500x400")
    app.grid_columnconfigure(0, weight=1)
    set_appearance_mode("light")

    header = CTkLabel(app, text="Sign in", text_color="#70b0f8", font=CTkFont(weight="bold", size=25))
    header.grid(row=0, column=0, padx=50, pady=20, sticky="ew")

    entry1 = CTkLinedEntry(app, placeholder_text="Username")
    entry1.grid(row=1, column=0, padx=50, pady=10, sticky="ew")

    entry2 = CTkLinedEntry(app, placeholder_text="Password")
    entry2.grid(row=2, column=0, padx=50, pady=10, sticky="ew")

    button_signin = CTkButton(app, text="Sign in", corner_radius=0, fg_color="#70b0f8")
    button_signin.grid(row=3, column=0, padx=80, pady=10, sticky="ew")

    # Adding extra functionality
    buttom_frame_text = CTkFrame(app, fg_color="transparent")
    buttom_frame_text.grid_columnconfigure((0, 1), weight=1)
    CTkLabel(buttom_frame_text, text="Don't have an account?").grid(row=0, column=0, sticky="e")
    CTkButton(buttom_frame_text, text="Sign up", fg_color="transparent", width=0, hover=False,
        command=lambda: print("New Sign up requested!"), text_color="#70b0f8").grid(row=0, column=1, sticky="w")
    buttom_frame_text.grid(row=4, column=0, pady=10, sticky="ew")

    app.mainloop()

Você também pode definir a cor da linha inferior ou cores diferentes para modos diferentes, fornecendo uma tupla de duas cores. Outras propriedades são iguais às da caixa de entrada normal.

Espero que seja útil para você. Feliz customtkinter :)

Thank you very much man, it was extremely useful! thank you very much

1saquee commented 8 months ago

usando o customtkinter É possível criar uma entrada sem bordas ou núcleos de fundo? como o da imagem Captura de Tela (3)

Sim, definitivamente. Defina a cor do primeiro plano como transparente (ou como cor de fundo) junto com a cor da borda. Será semelhante à imagem que você apareceu. Eu criei uma classe CTkLinedEntry que pode criar tais efeitos. Funciona bem com os modos claro e escuro. Possui as seguintes propriedades extras: bottom_line_color: str | tuple[str, str] = None - inicialmente nenhuma para coloração automática dos resultados financeiros. Modo de luz:ctk_linedentry

    [

    ](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA)

        ![ctk_linedentry](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA)

      [

      ](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA)

   [ ](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA) ![ctk_linedentry](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA)

    [

    ](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA)

        ![ctk_linedentry](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA)

      [

      ](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA)

   [ ](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA)

Modo escuro:ctk_linedentry_dark

    [

    ](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0)

        ![ctk_linedentry_dark](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0)

      [

      ](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0)

   [ ](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0) ![ctk_linedentry_dark](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0)

    [

    ](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0)

        ![ctk_linedentry_dark](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0)

      [

      ](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0)

   [ ](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0)

Código:

from customtkinter import (
    CTk,
    CTkEntry,
    CTkLabel,
    CTkButton,
    CTkFont,
    CTkFrame,
    Variable,
)

from customtkinter import set_appearance_mode

class CTkLinedEntry(CTkEntry):
    def __init__(self,
        master: any,
        width: int = 140,
        height: int = 28,
        bg_color: str | tuple[str, str] = "transparent",
        text_color: str | tuple[str, str] | None = None,
        placeholder_text_color: str | tuple[str, str] | None = None,
        textvariable: Variable | None = None,
        placeholder_text: str | None = None,
        font: tuple | CTkFont | None = None,
        state: str = "normal",
        bottom_line_color: str | tuple[str, str] = None, 
        **kwargs):

        fg_color = "transparent"
        border_width = 0
        corner_radius = 0
        border_color = None
        super().__init__(master, width, height, corner_radius, border_width, bg_color, fg_color, border_color, text_color, placeholder_text_color, textvariable, placeholder_text, font, state, **kwargs)

        self.bottom_line_color = bottom_line_color
        self.width = width
        self.height = height
        self._draw_bottom_line()

    def _draw_bottom_line(self):
        if self.bottom_line_color:
            if isinstance(self.bottom_line_color, str):
                self._canvas.configure(background=self.bottom_line_color)
            elif isinstance(self.bottom_line_color, tuple):
                self._set_bottom_line_color()
        else:
            self.bottom_line_color = "black", "white"
            self._set_bottom_line_color()

        self._entry.grid_configure(padx=0)

    def _set_bottom_line_color(self):
        if self._get_appearance_mode() == "light":
            self._canvas.configure(background=
                self.bottom_line_color[0])
        else:
            self._canvas.configure(background=
                self.bottom_line_color[1])

if __name__ == "__main__":
    app = CTk()
    app.geometry("500x400")
    app.grid_columnconfigure(0, weight=1)
    set_appearance_mode("light")

    header = CTkLabel(app, text="Sign in", text_color="#70b0f8", font=CTkFont(weight="bold", size=25))
    header.grid(row=0, column=0, padx=50, pady=20, sticky="ew")

    entry1 = CTkLinedEntry(app, placeholder_text="Username")
    entry1.grid(row=1, column=0, padx=50, pady=10, sticky="ew")

    entry2 = CTkLinedEntry(app, placeholder_text="Password")
    entry2.grid(row=2, column=0, padx=50, pady=10, sticky="ew")

    button_signin = CTkButton(app, text="Sign in", corner_radius=0, fg_color="#70b0f8")
    button_signin.grid(row=3, column=0, padx=80, pady=10, sticky="ew")

    # Adding extra functionality
    buttom_frame_text = CTkFrame(app, fg_color="transparent")
    buttom_frame_text.grid_columnconfigure((0, 1), weight=1)
    CTkLabel(buttom_frame_text, text="Don't have an account?").grid(row=0, column=0, sticky="e")
    CTkButton(buttom_frame_text, text="Sign up", fg_color="transparent", width=0, hover=False,
        command=lambda: print("New Sign up requested!"), text_color="#70b0f8").grid(row=0, column=1, sticky="w")
    buttom_frame_text.grid(row=4, column=0, pady=10, sticky="ew")

    app.mainloop()

Você também pode definir a cor da linha inferior ou cores diferentes para modos diferentes, fornecendo uma tupla de duas cores. Outras propriedades são iguais à caixa de entrada normal. Espero que seja útil para você. Feliz customtkinter :) Did you write all these lines just for me to respond? Sorry to bother you. I helped a lot friend

dipeshSam commented 8 months ago

usando o customtkinter É possível criar uma entrada sem bordas ou cores de fundo? como o da imagem Captura de Tela (3)

Sim, definitivamente. Defina a cor do primeiro plano como transparente (ou como cor de fundo) junto com a cor da borda. Será semelhante à imagem que você forneceu.

Eu criei uma classe CTkLinedEntry que pode criar tais efeitos. Funciona bem com os modos claro e escuro. Possui as seguintes propriedades extras: bottom_line_color: str | tuple[str, str] = None - Inicialmente nenhuma para coloração automática dos resultados financeiros.

Modo de luz: ctk_linedentry ctk_linedentry

Modo escuro: ctk_linedentry_dark ctk_linedentry_dark

Código:

from customtkinter import (
    CTk,
    CTkEntry,
    CTkLabel,
    CTkButton,
    CTkFont,
    CTkFrame,
    Variable,
)

from customtkinter import set_appearance_mode

class CTkLinedEntry(CTkEntry):
    def __init__(self,
        master: any,
        width: int = 140,
        height: int = 28,
        bg_color: str | tuple[str, str] = "transparent",
        text_color: str | tuple[str, str] | None = None,
        placeholder_text_color: str | tuple[str, str] | None = None,
        textvariable: Variable | None = None,
        placeholder_text: str | None = None,
        font: tuple | CTkFont | None = None,
        state: str = "normal",
        bottom_line_color: str | tuple[str, str] = None, 
        **kwargs):

        fg_color = "transparent"
        border_width = 0
        corner_radius = 0
        border_color = None
        super().__init__(master, width, height, corner_radius, border_width, bg_color, fg_color, border_color, text_color, placeholder_text_color, textvariable, placeholder_text, font, state, **kwargs)

        self.bottom_line_color = bottom_line_color
        self.width = width
        self.height = height
        self._draw_bottom_line()

    def _draw_bottom_line(self):
        if self.bottom_line_color:
            if isinstance(self.bottom_line_color, str):
                self._canvas.configure(background=self.bottom_line_color)
            elif isinstance(self.bottom_line_color, tuple):
                self._set_bottom_line_color()
        else:
            self.bottom_line_color = "black", "white"
            self._set_bottom_line_color()

        self._entry.grid_configure(padx=0)

    def _set_bottom_line_color(self):
        if self._get_appearance_mode() == "light":
            self._canvas.configure(background=
                self.bottom_line_color[0])
        else:
            self._canvas.configure(background=
                self.bottom_line_color[1])

if __name__ == "__main__":
    app = CTk()
    app.geometry("500x400")
    app.grid_columnconfigure(0, weight=1)
    set_appearance_mode("light")

    header = CTkLabel(app, text="Sign in", text_color="#70b0f8", font=CTkFont(weight="bold", size=25))
    header.grid(row=0, column=0, padx=50, pady=20, sticky="ew")

    entry1 = CTkLinedEntry(app, placeholder_text="Username")
    entry1.grid(row=1, column=0, padx=50, pady=10, sticky="ew")

    entry2 = CTkLinedEntry(app, placeholder_text="Password")
    entry2.grid(row=2, column=0, padx=50, pady=10, sticky="ew")

    button_signin = CTkButton(app, text="Sign in", corner_radius=0, fg_color="#70b0f8")
    button_signin.grid(row=3, column=0, padx=80, pady=10, sticky="ew")

    # Adding extra functionality
    buttom_frame_text = CTkFrame(app, fg_color="transparent")
    buttom_frame_text.grid_columnconfigure((0, 1), weight=1)
    CTkLabel(buttom_frame_text, text="Don't have an account?").grid(row=0, column=0, sticky="e")
    CTkButton(buttom_frame_text, text="Sign up", fg_color="transparent", width=0, hover=False,
        command=lambda: print("New Sign up requested!"), text_color="#70b0f8").grid(row=0, column=1, sticky="w")
    buttom_frame_text.grid(row=4, column=0, pady=10, sticky="ew")

    app.mainloop()

Você também pode definir a cor da linha inferior ou cores diferentes para modos diferentes, fornecendo uma tupla de duas cores. Outras propriedades são iguais às da caixa de entrada normal.

Espero que seja útil para você. Feliz customtkinter :)

Thank you very much man, it was extremely useful! thank you very much

You are most welcome. Happy customtkinter :)

dipeshSam commented 8 months ago

usando o customtkinter É possível criar uma entrada sem bordas ou núcleos de fundo? como o da imagem Captura de Tela (3)

Sim, definitivamente. Defina a cor do primeiro plano como transparente (ou como cor de fundo) junto com a cor da borda. Será semelhante à imagem que você apareceu. Eu criei uma classe CTkLinedEntry que pode criar tais efeitos. Funciona bem com os modos claro e escuro. Possui as seguintes propriedades extras: bottom_line_color: str | tuple[str, str] = None - inicialmente nenhuma para coloração automática dos resultados financeiros. Modo de luz:ctk_linedentry

    [

    ](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA)

        ![ctk_linedentry](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA)

      [

      ](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA)

   [ ](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA) ![ctk_linedentry](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA)

    [

    ](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA)

        ![ctk_linedentry](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA)

      [

      ](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA)

   [ ](https://private-user-images.githubusercontent.com/72375763/291527036-580d768d-7a5f-47cf-8f5d-95fd52d7e0fc.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcwMzYtNTgwZDc2OGQtN2E1Zi00N2NmLThmNWQtOTVmZDUyZDdlMGZjLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZmQ1MmZmMjgwMmVjY2IxM2ZmYTljZWYzYmEwYzFlMThmYzg5ZmU5Zjk1ZDBhZWUxNmFlZDE5NGRlMWIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rr_QK6DnQ3Vi6eq1pfUO9C6-hOShn7GBOq1HNmKvbvA)

Modo escuro:ctk_linedentry_dark

    [

    ](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0)

        ![ctk_linedentry_dark](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0)

      [

      ](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0)

   [ ](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0) ![ctk_linedentry_dark](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0)

    [

    ](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0)

        ![ctk_linedentry_dark](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0)

      [

      ](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0)

   [ ](https://private-user-images.githubusercontent.com/72375763/291527106-95465ebb-f39e-46d8-b664-46b5a6cfd91b.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwMDE1MDcsIm5iZiI6MTcwMzAwMTIwNywicGF0aCI6Ii83MjM3NTc2My8yOTE1MjcxMDYtOTU0NjVlYmItZjM5ZS00NmQ4LWI2NjQtNDZiNWE2Y2ZkOTFiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDE1NTMyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRkOTkwMTg2Nzc4YjBiZGI0YzAzMWQ5YTM2MmE0MDliNTBmNDkwMWM2ZmNmNmViZTRiNTNkNzM1ODI1ODBiNWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.wJzULyRzsbrDJ1Byq94KyeIEUs7l4og2MeZsR4fBFb0)

Código:

from customtkinter import (
    CTk,
    CTkEntry,
    CTkLabel,
    CTkButton,
    CTkFont,
    CTkFrame,
    Variable,
)

from customtkinter import set_appearance_mode

class CTkLinedEntry(CTkEntry):
    def __init__(self,
        master: any,
        width: int = 140,
        height: int = 28,
        bg_color: str | tuple[str, str] = "transparent",
        text_color: str | tuple[str, str] | None = None,
        placeholder_text_color: str | tuple[str, str] | None = None,
        textvariable: Variable | None = None,
        placeholder_text: str | None = None,
        font: tuple | CTkFont | None = None,
        state: str = "normal",
        bottom_line_color: str | tuple[str, str] = None, 
        **kwargs):

        fg_color = "transparent"
        border_width = 0
        corner_radius = 0
        border_color = None
        super().__init__(master, width, height, corner_radius, border_width, bg_color, fg_color, border_color, text_color, placeholder_text_color, textvariable, placeholder_text, font, state, **kwargs)

        self.bottom_line_color = bottom_line_color
        self.width = width
        self.height = height
        self._draw_bottom_line()

    def _draw_bottom_line(self):
        if self.bottom_line_color:
            if isinstance(self.bottom_line_color, str):
                self._canvas.configure(background=self.bottom_line_color)
            elif isinstance(self.bottom_line_color, tuple):
                self._set_bottom_line_color()
        else:
            self.bottom_line_color = "black", "white"
            self._set_bottom_line_color()

        self._entry.grid_configure(padx=0)

    def _set_bottom_line_color(self):
        if self._get_appearance_mode() == "light":
            self._canvas.configure(background=
                self.bottom_line_color[0])
        else:
            self._canvas.configure(background=
                self.bottom_line_color[1])

if __name__ == "__main__":
    app = CTk()
    app.geometry("500x400")
    app.grid_columnconfigure(0, weight=1)
    set_appearance_mode("light")

    header = CTkLabel(app, text="Sign in", text_color="#70b0f8", font=CTkFont(weight="bold", size=25))
    header.grid(row=0, column=0, padx=50, pady=20, sticky="ew")

    entry1 = CTkLinedEntry(app, placeholder_text="Username")
    entry1.grid(row=1, column=0, padx=50, pady=10, sticky="ew")

    entry2 = CTkLinedEntry(app, placeholder_text="Password")
    entry2.grid(row=2, column=0, padx=50, pady=10, sticky="ew")

    button_signin = CTkButton(app, text="Sign in", corner_radius=0, fg_color="#70b0f8")
    button_signin.grid(row=3, column=0, padx=80, pady=10, sticky="ew")

    # Adding extra functionality
    buttom_frame_text = CTkFrame(app, fg_color="transparent")
    buttom_frame_text.grid_columnconfigure((0, 1), weight=1)
    CTkLabel(buttom_frame_text, text="Don't have an account?").grid(row=0, column=0, sticky="e")
    CTkButton(buttom_frame_text, text="Sign up", fg_color="transparent", width=0, hover=False,
        command=lambda: print("New Sign up requested!"), text_color="#70b0f8").grid(row=0, column=1, sticky="w")
    buttom_frame_text.grid(row=4, column=0, pady=10, sticky="ew")

    app.mainloop()

Você também pode definir a cor da linha inferior ou cores diferentes para modos diferentes, fornecendo uma tupla de duas cores. Outras propriedades são iguais à caixa de entrada normal. Espero que seja útil para você. Feliz customtkinter :) Did you write all these lines just for me to respond? Sorry to bother you. I helped a lot friend

You are again most welcome brother. This is what programming teach us! Enjoy good coding :)