Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ########################################################################################################################
- # File: forms.py
- # Purpose:
- # Author: Dan Huckson, https://github.com/unodan
- ########################################################################################################################
- from tkinter import Frame, Label, LabelFrame, Entry, Button, messagebox
- from importlib import import_module
- class Form(Frame):
- def __init__(self, parent, table, widgets, *args, **kwargs):
- super().__init__(parent, *args, **kwargs)
- self.__table = table
- self.__groups = {}
- self.__parent = parent
- self.populate(widgets)
- self.grid(sticky='NSEW')
- def add_items(self, item, **kwargs):
- if item[0] in self.__groups:
- return
- bd = kwargs.pop('bd', self.cget('bd'))
- bg = kwargs.pop('bg', self.cget('bg'))
- if isinstance(item[3], tuple):
- if item[2] == 'Frame':
- self.__groups[item[0]] = FormFrame(self, item)
- elif item[2] == 'LabelFrame':
- self.__groups[item[0]] = FormLabelFrame(self, item)
- else:
- print(121133)
- print('>>', item)
- #f = FormField(self, item)
- def populate(self, widgets):
- if widgets:
- for widget in widgets:
- self.add_items(widget)
- def group(self, key):
- if key in self.__groups:
- return self.__groups[key]
- return None
- def groups(self):
- return self.__groups
- class FormFrame(Frame):
- def __init__(self, parent, widgets, *args, **kwargs):
- super().__init__(parent, *args, **kwargs)
- print('>', widgets)
- class FormLabelFrame(LabelFrame):
- def __init__(self, parent, widgets, *args, **kwargs):
- super().__init__(parent, *args, **kwargs)
- self.__fields = {}
- self.config(text=widgets[1])
- for item in widgets[3]:
- if isinstance(item[3], tuple):
- print('FRAME', item)
- f = FormLabelFrame(self, item)
- else:
- module = import_module('tkforms')
- widget_class = getattr(module, item[2] + 'Field')
- self.__fields[item[0]] = widget_class(self, item)
- self.__fields[item[0]].grid()
- self.grid(row=widgets[4], column=widgets[5], sticky='NW')
- def fields(self):
- return self.__fields
- class EntryField(Frame):
- def __init__(self, parent, field, *args, **kwargs):
- super().__init__(parent, *args, **kwargs)
- if field[2] == 'entry':
- Label(self, text=field[1]).grid(sticky='NE')
- e = Entry(self)
- e.grid(row=0, column=1, sticky='NE')
- class ButtonField(Frame):
- def __init__(self, parent, field, *args, **kwargs):
- super().__init__(parent, *args, **kwargs)
- if field[2] == 'button':
- b = Button(self, text=field[1], command=field[3])
- b.grid(row=0, column=1, sticky='NE')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement