Ejemplo n.º 1
0
class Scrolled_textbox:
    def __init__(self, **kwargs):
        def apply_attribute(attrib):
            return kwargs[attrib] if attrib in kwargs else False

        self.language = apply_attribute('language')
        self.fill_tag = apply_attribute('fill_tag')
        self.filter = apply_attribute('filter')

        self.label_attributes = {} if not apply_attribute(
            'settings') or not hasattr(
                apply_attribute('settings'), 'label_settings') else dict(
                    apply_attribute('settings').label_settings)
        for attrib, value in {
                'text':
                self.language[apply_attribute('label_text')].strip()
                if self.language else apply_attribute('label_text'),
                'width':
                apply_attribute('label_width'),
                'anchor':
                apply_attribute('anchor')
        }.items():
            if value: self.label_attributes.update({attrib: value})

        self.entry_attributes = {} if not apply_attribute(
            'settings') or not hasattr(
                apply_attribute('settings'), 'entry_settings') else dict(
                    apply_attribute('settings').entry_settings)
        for attrib, value in {
                'width': apply_attribute('entry_width'),
                'height': apply_attribute('entry_height')
        }.items():
            if value: self.entry_attributes.update({attrib: value})

    def config(self, **kwargs):
        if 'entry_text' in kwargs:
            self.entry.insert(END, kwargs['entry_text'])

        if 'language' in kwargs:
            self.language = kwargs['language']
            self.label.config(text=self.language[self.label.get()].strip())

        return

    def create_widget(self, **kwargs):

        self.encompass_frame = Frame(kwargs['parent_obj'],
                                     width=self.width,
                                     height=self.height)
        self.encompass_label = Frame(self.encompass_frame,
                                     width=int(self.width / 4),
                                     height=int(self.height / 2))
        self.encompass_entry = Frame(self.encompass_frame,
                                     width=int(3 * self.width / 4),
                                     height=int(self.height / 2))

        self.grid_row = kwargs['grid_row']
        self.grid_column = kwargs['grid_column']

        self.label = Label(self.encompass_label, height=int(self.height))
        self.entry = ScrolledText(self.encompass_entry)

        for attrib, value in self.label_attributes.items():
            if value: self.label.__setitem__(attrib, value)

        for attrib, value in self.entry_attributes.items():
            if value: self.entry.__setitem__(attrib, value)

        self.label.pack(fill=X)
        self.entry.pack(fill=X)
        self.encompass_frame.pack_propagate(0)
        self.encompass_label.pack_propagate(0)
        self.encompass_entry.pack_propagate(0)

        self.encompass_label.pack(side=LEFT)
        self.encompass_entry.pack(side=LEFT)
        self.encompass_frame.place(y=self.grid_row, x=self.grid_column)

    def delete_widget(self):
        self.encompass_frame.place_forget()

    def get_data(self):
        return self.entry.get('1.0', END + '-1c')

    def set_data(self, data):
        self.entry.delete('1.0', END)
        self.config(entry_text=data)

    def hide_widget(self):
        self.encompass_frame.grid_forget()

    def show_widget(self, new_grid_row=False, new_grid_column=False):
        self.grid_row = new_grid_row if new_grid_row else self.grid_row
        self.grid_column = new_grid_column if new_grid_column else self.grid_column

        self.encompass_frame.grid(row=self.grid_row, column=self.grid_column)