Advertisement
Uno-Dan

Untitled

May 6th, 2018
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.08 KB | None | 0 0
  1. ########################################################################################################################
  2. #    File: forms.py
  3. # Purpose:
  4. #  Author: Dan Huckson, https://github.com/unodan
  5. ########################################################################################################################
  6.  
  7. from tkinter import Frame, Label, LabelFrame, Entry, Button, messagebox
  8. from importlib import import_module
  9.  
  10.  
  11. class Form(Frame):
  12.     def __init__(self, parent, table, widgets, *args, **kwargs):
  13.         super().__init__(parent, *args, **kwargs)
  14.  
  15.         self.__table = table
  16.         self.__groups = {}
  17.         self.__parent = parent
  18.  
  19.         self.populate(widgets)
  20.  
  21.         self.grid(sticky='NSEW')
  22.  
  23.     def add_items(self, item, **kwargs):
  24.         if item[0] in self.__groups:
  25.             return
  26.  
  27.         bd = kwargs.pop('bd', self.cget('bd'))
  28.         bg = kwargs.pop('bg', self.cget('bg'))
  29.  
  30.         if isinstance(item[3], tuple):
  31.             if item[2] == 'Frame':
  32.                 self.__groups[item[0]] = FormFrame(self, item)
  33.             elif item[2] == 'LabelFrame':
  34.                 self.__groups[item[0]] = FormLabelFrame(self, item)
  35.         else:
  36.             print(121133)
  37.             print('>>', item)
  38.             #f = FormField(self, item)
  39.  
  40.     def populate(self, widgets):
  41.         if widgets:
  42.             for widget in widgets:
  43.                 self.add_items(widget)
  44.  
  45.     def group(self, key):
  46.         if key in self.__groups:
  47.             return self.__groups[key]
  48.  
  49.         return None
  50.  
  51.     def groups(self):
  52.         return self.__groups
  53.  
  54.  
  55. class FormFrame(Frame):
  56.     def __init__(self, parent, widgets, *args, **kwargs):
  57.         super().__init__(parent, *args, **kwargs)
  58.  
  59.         print('>', widgets)
  60.  
  61.  
  62. class FormLabelFrame(LabelFrame):
  63.     def __init__(self, parent, widgets, *args, **kwargs):
  64.         super().__init__(parent, *args, **kwargs)
  65.  
  66.         self.__fields = {}
  67.         self.config(text=widgets[1])
  68.  
  69.         for item in widgets[3]:
  70.             if isinstance(item[3], tuple):
  71.                 print('FRAME', item)
  72.                 f = FormLabelFrame(self, item)
  73.             else:
  74.                 module = import_module('tkforms')
  75.                 widget_class = getattr(module, item[2] + 'Field')
  76.  
  77.                 self.__fields[item[0]] = widget_class(self, item)
  78.                 self.__fields[item[0]].grid()
  79.  
  80.         self.grid(row=widgets[4], column=widgets[5], sticky='NW')
  81.  
  82.     def fields(self):
  83.         return self.__fields
  84.  
  85.  
  86. class EntryField(Frame):
  87.     def __init__(self, parent, field, *args, **kwargs):
  88.         super().__init__(parent, *args, **kwargs)
  89.  
  90.         if field[2] == 'entry':
  91.             Label(self, text=field[1]).grid(sticky='NE')
  92.             e = Entry(self)
  93.             e.grid(row=0, column=1, sticky='NE')
  94.  
  95.  
  96. class ButtonField(Frame):
  97.     def __init__(self, parent, field, *args, **kwargs):
  98.         super().__init__(parent, *args, **kwargs)
  99.  
  100.         if field[2] == 'button':
  101.             b = Button(self, text=field[1], command=field[3])
  102.             b.grid(row=0, column=1, sticky='NE')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement