Source code for GUIBRUSHR.GUI.WIDGET.MyEntry

import tkinter as tk
from tkinter import Frame, Entry
from typing import Any, Dict, Optional

from GUIBRUSHR.GUI.LAYOUT.ScaleManager import ScaleManager
from GUIBRUSHR.GUI.WIDGET.MyLabel import MyLabel


[docs] class MyEntry(Frame): """ A custom entry widget that wraps tkinter's Entry in a Frame. This class creates a text entry field with customizable appearance and behavior, inheriting from Frame to provide better grid layout management and consistent styling. It can optionally include a label. Attributes: entry (Entry): The underlying tkinter Entry widget """
[docs] def __init__( self, parent: Any, row: int, column: int, text: str, label_text: Optional[str] = None, color: str = "#AAAAAA", columnspan: int = 2, entry_width: int = 10, **kwargs: Dict[str, Any] ) -> None: """ Initialize the MyEntry widget. Args: parent: The parent widget row: Row position in the parent's grid column: Column position in the parent's grid text: Initial text to display in the entry field label_text: Optional text to display as a label before the entry field color: Background color of the containing frame columnspan: Number of columns the widget should span entry_width: Width of the entry field in characters **kwargs: Additional keyword arguments passed to the Entry widget """ # Initialize the parent Frame class super().__init__(parent, bg=color) col_label = 0 if label_text is not None: # Create the Label _ = MyLabel(self, 0, 0, color=color, label_text=label_text) col_label = 1 # Create the Entry widget with scaled font sm = ScaleManager.get() entry_font = sm.font_entry if sm else None entry_kwargs = dict(**kwargs) if entry_font: entry_kwargs["font"] = entry_font self.entry = Entry(self, width=entry_width, **entry_kwargs) self.entry.insert(tk.END, str(text)) self.entry.grid( column=1, row=0, columnspan=columnspan - col_label, padx=1, pady=1, sticky="ew" ) self.grid_columnconfigure(1, weight=1) # Grid the frame into the parent self.grid(row=row, column=column, columnspan=columnspan, sticky="ew")
[docs] def get_value(self) -> str: """ Get the current value from the entry field. Returns: str: The current text in the entry field """ return self.entry.get()
[docs] def set_value(self, value: str) -> None: """ Set the value of the entry field. Args: value: The text to set in the entry field """ self.entry.delete(0, tk.END) self.entry.insert(tk.END, str(value))
[docs] def set_status(self, status) -> None: """ Enable or disable the entry field. Args: status: The state to set the entry field to ('normal', 'disabled', etc.) """ self.entry.config(state=status)