Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Cell(object):
- def __init__(self, parent, key, data, **kwargs):
- self.key = key
- self.parent = parent
- self.members = {}
- self.grid_args = {}
- self.config_args = {}
- self.row = None
- self.rowspan = None
- self.column = None
- self.columnspan = None
- self.padx = None
- self.pady = None
- self.ipadx = None
- self.ipady = None
- self.index = None
- self.type = data.get('type', None)
- self.label = data.get('label', None)
- self.style = data.get('style', None)
- self.width = data.get('width', None)
- self.height = data.get('height', None)
- self.sticky = data.get('sticky', None)
- self.rowconfigure = data.get('rowconfigure', 0)
- self.columnconfigure = data.get('columnconfigure', 0)
- if self.type == 'LabelFrame':
- self.frame = LabelFrame(parent, text=self.label)
- else:
- self.frame = Frame(parent)
- self.frame.rowconfigure(self.rowconfigure, weight=1)
- self.frame.columnconfigure(self.columnconfigure, weight=1)
- self.frame.grid(sticky=self.sticky)
- def get(self, uri=None):
- if not uri:
- return self.frame
- uri = uri.replace('\\', '/').rstrip('/')
- if '/' in uri:
- def parse(parent, uri_part):
- parts = uri_part.split('/', 1)
- child = parent.get(parts[0])
- if len(parts) > 1:
- child = parse(child, parts[1])
- return child
- return parse(self, uri)
- if isinstance(self.members.get(uri, None), Field):
- return self.members.get(uri).field
- return self.members.get(uri, None)
- def add(self, data):
- key = next(iter(data.keys()))
- item = next(iter(data.values()))
- item_type = item.get('type')
- if key not in self.members:
- if item_type == 'PanedWindow':
- self.members[key] = Pane(self.frame, key, item)
- elif item_type in ('Frame', 'LabelFrame'):
- self.members[key] = Group(self.frame, key, item)
- else:
- self.members[key] = Field(self.frame, key, item)
- return self.members[key]
- def item(self, uri=None):
- return self.get(uri)
- def remove(self, uri):
- if not uri:
- return self.frame
- uri = uri.replace('\\', '/').rstrip('/')
- if '/' in uri:
- def parse(parent, uri_part):
- parts = uri_part.split('/', 1)
- child = parent.get(parts[0])
- if len(parts) > 1:
- child = parse(child, parts[1])
- return child
- return parse(self, uri)
- self.members[uri].grid_remove()
- del self.members[uri]
- def values(self, data=None):
- cache = URICache(data=data)
- def process(uri, members):
- for key, widget in members.items():
- if isinstance(widget, Field):
- target = uri + '/' + key + '/value'
- value = None if not data else cache.get(target, '')
- if widget.type in ('Treeview', 'Progressbar', 'Button', 'Separator', 'Label'):
- continue
- if widget.type == 'Notebook':
- for tab, page in widget.field.page.items():
- if hasattr(page, 'form'):
- process(uri + '/' + key + '/items/' + tab + '/content', page.form.members)
- elif widget.type == 'Text':
- if data:
- if value is None:
- value = ''
- widget.field.text.delete('1.0', 'end')
- widget.field.text.insert('end', value)
- else:
- cache.set(widget.field.text.get('1.0', 'end'), target)
- elif widget.type == 'Combobox':
- if data:
- item = ''
- if widget.items:
- if isinstance(value, str):
- value = 0
- item = widget.items[value]
- widget.field.set(item)
- if value:
- widget.field.combobox.current(value)
- else:
- cache.set(widget.items.index(widget.field.var.get()), target)
- else:
- if data:
- widget.field.set(value)
- else:
- cache.set(widget.field.var.get(), target)
- elif widget.type != 'PanedWindow':
- process(uri + '/' + key, widget.members)
- else:
- for k, v in widget.members.items():
- process(uri + '/' + key + '/' + k, v.members)
- process(self.key, self.members)
- return cache.get()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement