Source code for seamm_widgets.labeled_entry

# -*- coding: utf-8 -*-

"""Labeled entry widget.

The goal of these widgets is twofold: to make it easier for developers
to implement dialogs with compound widgets, and to naturally
standardize the user interface presented to the user.
"""

import logging
import seamm_widgets as sw
import tkinter as tk
import tkinter.ttk as ttk

logger = logging.getLogger(__name__)

options = {
    "entry": {
        "class_": "class_",
        "cursor": "cursor",
        "exportselection": "exportselection",
        "font": "font",
        "invalidcommand": "invalidcommand",
        "justify": "justify",
        "show": "show",
        "style": "style",
        "takefocus": "takefocus",
        "variable": "textvariable",
        "validate": "validate",
        "validatecommand": "validatecommand",
        "width": "width",
        "xscrollcommand": "xscrollcommand",
    },
}


[docs]class LabeledEntry(sw.LabeledWidget): def __init__(self, parent, *args, **kwargs): """Initialize the instance""" class_ = kwargs.pop("class_", "MLabeledEntry") super().__init__(parent, class_=class_) interior = self.interior # entry justify = kwargs.pop("justify", tk.LEFT) entrywidth = kwargs.pop("width", 15) self.entry = ttk.Entry(interior, justify=justify, width=entrywidth) self.entry.grid(row=0, column=0, sticky=tk.EW) # interior frame self.interior = ttk.Frame(interior) self.interior.grid(row=0, column=1, sticky=tk.NSEW) interior.columnconfigure(0, weight=1) self.config(**kwargs) @property def value(self): return self.get() @value.setter def value(self, value): self.set(value)
[docs] def show(self, *args): """Show only the specified subwidgets. 'all' or no arguments reverts to showing all""" super().show(*args) show_all = len(args) == 0 or args[0] == "all" if show_all or "entry" in args: self.entry.grid(row=0, column=0, sticky=tk.EW) else: self.entry.grid_forget()
[docs] def set(self, value): """Set the value of the entry widget""" self.entry.delete(0, tk.END) if value is None: return self.entry.insert(0, value)
[docs] def get(self): """return the current value""" value = self.entry.get() return value
[docs] def config(self, **kwargs): """Set the configuration of the megawidget""" # our options that we deal with entry = options["entry"] # cannot modify kwargs while iterating over it... keys = [*kwargs.keys()] for k in keys: if k in entry: v = kwargs.pop(k) self.entry.config(**{entry[k]: v}) # having removed our options, pass rest to parent super().config(**kwargs)