Closed 1saquee closed 8 months ago
using customtkinter Is it possible to create an entry without borders or background colors? 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:
Dark Mode:
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 :)
usando o customtkinter É possível criar uma entrada sem bordas ou cores de fundo? como o da imagem
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.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
usando o customtkinter É possível criar uma entrada sem bordas ou núcleos de fundo? como o da imagem
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:[ ](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:
[ ](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
usando o customtkinter É possível criar uma entrada sem bordas ou cores de fundo? como o da imagem
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.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 :)
usando o customtkinter É possível criar uma entrada sem bordas ou núcleos de fundo? como o da imagem
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:[ ](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:
[ ](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 :)
using customtkinter Is it possible to create an entry without borders or background colors? like the one in the image