Пример #1
0
class StringEntry:
    """String class for entry
        added colour, change state

    Parameters
    ----------
    parent : str
        parent handle
    lf_text : str
        text on LabelFrame
    mess_text : str
        message
    def_text : str
        default text
    colour : str
        frame colour
    mod : str
        enable or disable state switch

    Returns
    -------
    string
    """
    def __init__(self,
                 parent,
                 lf_text,
                 mess_text,
                 def_text="",
                 colour='brown',
                 mod=False):
        self.parent = parent
        self.lf_text = lf_text
        self.mess_text = mess_text
        self.mod = mod

        self.out_var = StringVar()
        self.out_var.set(def_text)

        self.farbe = farbe = {
            'blue': 'light blue',
            'brown': '#EDEF77',
            'green': 'light green',
            'pink': '#EAAFBF'
        }

        colour = colour if colour in farbe else 'brown'

        self.colour = colour

        st1 = Style()
        st1.theme_use('default')

        st1.configure(colour + '.TLabelframe', background='#C9B99B')
        st1.configure(colour + '.TLabelframe.Label', background=farbe[colour])
        st1.configure(colour + '.TCheckbutton', background=farbe[colour])
        st1.configure('brown.TLabel', background='#EDEF77')

        self.construct()

    def construct(self):
        """construct of LabelFrame and message

        Parameters
        ----------
        None

        Returns
        -------
        None
        """
        self.lf1 = Labelframe(self.parent,
                              text=self.lf_text,
                              style=self.colour + '.TLabelframe')
        self.lf1.grid(column=0, row=0, padx=10, pady=10)
        self.messlbl = Label(self.lf1,
                             text=self.mess_text,
                             style='brown.TLabel')
        self.messlbl.grid(row=2, column=0, pady=10, padx=10)

        self.make_entry()

    def make_entry(self):
        """construct of Entry

        Parameters
        ----------
        None

        Returns
        -------
        None
        """
        vcmd = self.lf1.register(self.is_okay)

        self.ent1 = ent1 = Entry(self.lf1,
                                 validate='key',
                                 validatecommand=(vcmd, '%P', '%S', '%i'),
                                 textvariable=self.out_var)
        ent1.bind("<Return>", self.end_input)
        ent1.grid(row=1, column=0, padx=10)
        ent1.focus()

        if self.mod in (True, False):
            self.modify()

    def modify(self):
        """construct of state switch

        Parameters
        ----------
        None

        Returns
        -------
        None
        """
        lf_text = self.lf_text
        # entry disabled until checkbox is ticked
        self.cb_opt = Checkbutton(self.lf1,
                                  command=self.toggle_opt,
                                  style=self.colour + '.TCheckbutton')
        self.lf1['labelwidget'] = self.cb_opt
        if self.mod:
            self.ent1.state(['!disabled'])
            self.cb_opt.state(['!selected'])
            self.cb_opt['text'] = lf_text + ' Check to prevent editing '
            self.ent1.focus()
        else:
            self.ent1.state(['disabled'])
            self.cb_opt.state(['selected'])
            self.cb_opt['text'] = lf_text + ' Check to modify '

    def toggle_opt(self):
        """state switch logic

        Parameters
        ----------
        None

        Returns
        -------
        None
        """
        lf_text = self.lf_text
        #       state of entry controlled
        #       by the state of the check button in Option frame label widget
        if self.cb_opt.instate(['selected']):
            print('selected state')
            self.ent1.state(['disabled'])
            self.cb_opt['text'] = lf_text + ' Check to modify '
        else:
            print('unselected state')
            self.ent1.state(['!disabled'])  # enable option
            self.cb_opt['text'] = lf_text + ' Check to prevent editing '
            self.ent1.focus()

    def end_input(self, _evt):
        """limit on string

        Parameters
        ----------
        evt : str
            bind handle

        Returns
        -------
        None
        """
        if len(self.out_var.get()) > 5:
            self.messlbl['text'] = "That's OK"
        else:
            self.messlbl['text'] = "Should be at least 6 characters long"

    def is_okay(self, text, inp, ind):
        """ validation function

        Parameters
        ----------
        text : str
            text if allowed
        inp : str
            current input

        Returns
        -------
        boolean
        """
        ind = int(ind)
        print(ind)
        if (inp.isalnum() or inp in (",", ".", "'", " ")) and ind > 0:
            return True
        else:
            return bool((text.isupper() or text == "") and ind == 0)
Пример #2
0
class StringEntry:
    """String class for entry
        06layout_string converted to a class

    Parameters
    ----------
    parent : str
        parent handle
    lf_text : str
        text on LabelFrame
    mess_text : str
        message
    outVar : float
        tkvar handle

    Returns
    -------
    string
    """
    def __init__(self, parent, lf_text, mess_text):
        self.parent = parent
        self.lf_text = lf_text
        self.mess_text = mess_text

        self.out_var = StringVar()

        st1 = Style()
        st1.theme_use('default')

        st1.configure('brown.TLabelframe', background='#C9B99B')
        st1.configure('brown.TLabelframe.Label', background='#EDEF77')
        st1.configure('brown.TLabel', background='#EDEF77')

        self.construct()

    def construct(self):
        """construct of LabelFrame and message

        Parameters
        ----------
        None

        Returns
        -------
        None
        """
        self.lf0 = Labelframe(self.parent, text=self.lf_text,
                              style='brown.TLabelframe')
        self.lf0.grid(column=0, row=0, padx=10, pady=10)
        self.mee_lbl = Label(self.lf0, text=self.mess_text,
                             style='brown.TLabel')
        self.mee_lbl.grid(row=2, column=0, pady=10, padx=10)

        self.make_entry()

    def make_entry(self):
        """construct of Entry

        Parameters
        ----------
        None

        Returns
        -------
        None
        """
        vcmd = self.lf0.register(self.is_okay)

        ent0 = Entry(self.lf0, validatecommand=(vcmd, '%P', '%S', '%i'),
                     validate='key', textvariable=self.out_var)
        ent0.bind("<Return>", self.end_input)
        ent0.grid(row=1, column=0, padx=10)
        ent0.focus()

    def end_input(self, _evt):
        """limit on string

        Parameters
        ----------
        evt : str
            bind handle

        Returns
        -------
        None
        """
        if len(self.out_var.get()) > 5:
            self.mee_lbl['text'] = "That's OK"
        else:
            self.mee_lbl['text'] = "Should be at least 6 characters long"

    def is_okay(self, text, input, index):
        """ validation function

        Parameters
        ----------
        text : str
            text if allowed
        input : str
            current input

        Returns
        -------
        boolean
        """
        #print(text)
        index = int(index)
        print(index)
        if (input.isalnum() or input in (",", ".", "'", " ")) and index > 0:
            return True
        else:
            return bool((text.isupper() or text == "") and index == 0)
Пример #3
0
def entry_float(parent, lf_text, l_limit, u_limit, mess_text, out_var):
    """Float layout for entry

    Parameters
    ----------
    parent : str
        parent handle
    lf_text : str
        text on LabelFrame
    l_limit : float
        lower limit
    u_limit : float
        upper limit
    mess_text : str
        message
    out_var : float
        tkvar handle

    Returns
    -------
    float
    """
    st1 = Style()
    st1.theme_use('default')

    st1.configure('brown.TLabelframe', background='#C9B99B')
    st1.configure('brown.TLabelframe.Label', background='#EDEF77')
    st1.configure('brown.TLabel', background='#EDEF77')
    st1.configure('lowr.TLabel', background='lightblue')
    st1.configure('upr.TLabel', background='red')

    lf0 = Labelframe(parent, text=lf_text, style='brown.TLabelframe')
    lf0.grid(row=0, column=0, padx=10, pady=10)

    ulab = Label(lf0,
                 text=str(u_limit) + "  upper limit",
                 style='brown.TLabel')
    ulab.grid(row=0, column=1, padx=10)
    llab = Label(lf0,
                 text=str(l_limit) + "  lower limit",
                 style='brown.TLabel')
    llab.grid(row=2, column=1, padx=10)

    def end_input(_evt):
        """limit on float

        Parameters
        ----------
        evt : str
            bind handle

        Returns
        -------
        None
        """
        ulab['style'] = 'brown.TLabel'
        llab['style'] = 'brown.TLabel'
        if l_limit < entsv.get() < u_limit:
            messlbl['text'] = "That's OK"
            out_var.set(entsv.get())
        elif l_limit >= entsv.get():
            messlbl['text'] = "Input below lower limit"
            llab['style'] = 'lowr.TLabel'
        else:
            messlbl['text'] = "Input above upper limit"
            ulab['style'] = 'upr.TLabel'

    def is_okay(text):
        """ validation function

        Parameters
        ----------
        text : str
            text if allowed

        Returns
        -------
        boolean
        """
        if text in ("", "-", ".", "-."):
            return True
        try:
            float(text)
        except ValueError:
            return False
        return True

    vcmd = lf0.register(is_okay)

    entsv = DoubleVar()
    ent0 = Entry(lf0,
                 validate='key',
                 validatecommand=(vcmd, '%P'),
                 textvariable=entsv)
    ent0.bind("<Return>", end_input)
    ent0.grid(row=1, column=0, padx=10)
    ent0.focus()

    messlbl = Label(lf0, text=mess_text, style='brown.TLabel')
    messlbl.grid(row=2, column=0, pady=10, padx=10)
Пример #4
0
def entry_string(parent, lf_text, mess_text, out_var):
    """String layout for entry
        06layout_string converted to a function

    Parameters
    ----------
    parent : str
        parent handle
    lf_text : str
        text on LabelFrame
    mess_text : str
        message
    out_var : float
        tkvar handle

    Returns
    -------
    string
    """
    st1 = Style()
    st1.theme_use('default')

    st1.configure('brown.TLabelframe', background='#C9B99B')
    st1.configure('brown.TLabelframe.Label', background='#EDEF77')
    st1.configure('brown.TLabel', background='#EDEF77')

    lf0 = Labelframe(parent, text=lf_text, style='brown.TLabelframe')
    lf0.grid(column=0, row=0, padx=10, pady=10)

    def end_input(_evt):
        """limit on string

        Parameters
        ----------
        evt : str
            bind handle

        Returns
        -------
        None
        """
        if len(entsv.get()) > 5:
            mee_lbl['text'] = "That's OK"
            out_var.set(entsv.get())
        else:
            mee_lbl['text'] = "Should be at least 6 characters long"

    def is_okay(text, input, index):
        """ validation function

        Parameters
        ----------
        text : str
            text if allowed
        input : str
            current inputut
        index : str
            indexex

        Returns
        -------
        boolean
        """
        index = int(index)
        print(index)
        if (input.isalnum() or input in (",", ".", "'", " ")) and index > 0:
            return True
        else:
            return bool((text.isupper() or text == "") and index == 0)

    vcmd = lf0.register(is_okay)

    entsv = StringVar()
    ent0 = Entry(lf0,
                 validate='key',
                 textvariable=entsv,
                 validatecommand=(vcmd, '%P', '%S', '%i'))
    ent0.bind("<Return>", end_input)
    ent0.grid(row=1, column=0, padx=10)
    ent0.focus()

    mee_lbl = Label(lf0, text=mess_text, style='brown.TLabel')
    mee_lbl.grid(row=2, column=0, pady=10, padx=10)