def __init__(self, json_str, runner, master=None):
    j = json.loads(json_str)
    self.name = j['name']
    self.description = j['description']
    self.flag = j['flags'][(len(j['flags']) - 1)]
    self.parameter_type = j['parameter_type']
    self.file_type = ''
    self.file_type = j['parameter_type']['FileList']
    self.optional = j['optional']
    default_value = j['default_value']
    self.runner = runner
    ttk.Frame.__init__(self, master)
    self.grid()
    self['padding'] = '0.05i'
    self.label = ttk.Label(self, text=self.name, justify=tk.LEFT)
    self.label.grid(row=0, column=0, sticky=tk.W)
    self.label.columnconfigure(0, weight=1)
    if (not self.optional):
        self.label['text'] = (self.label['text'] + '*')
    fs_frame = ttk.Frame(self, padding='0.0i')
    self.opt = tk.Listbox(fs_frame, width=44, height=4)
    self.opt.grid(row=0, column=0, sticky=tk.NSEW)
    s = ttk.Scrollbar(fs_frame, orient=tk.VERTICAL, command=self.opt.yview)
    s.grid(row=0, column=1, sticky=(tk.N, tk.S))
    self.opt['yscrollcommand'] = s.set
    btn_frame = ttk.Frame(fs_frame, padding='0.0i')
    self.open_button = ttk.Button(btn_frame, width=4, text='...', command=self.select_file)
    self.open_button.grid(row=0, column=0, sticky=tk.NE)
    self.open_button.columnconfigure(0, weight=1)
    self.open_button.rowconfigure(0, weight=1)
    self.delete_button = ttk.Button(btn_frame, width=4, text='del', command=self.delete_entry)
    self.delete_button.grid(row=1, column=0, sticky=tk.NE)
    self.delete_button.columnconfigure(0, weight=1)
    self.delete_button.rowconfigure(1, weight=1)
    btn_frame.grid(row=0, column=2, sticky=tk.NE)
    fs_frame.grid(row=1, column=0, sticky=tk.NSEW)
    fs_frame.columnconfigure(0, weight=10)
    fs_frame.columnconfigure(1, weight=1)
    fs_frame.columnconfigure(2, weight=1)
    self.columnconfigure(0, weight=1)
    self.rowconfigure(0, weight=1)
    self.rowconfigure(1, weight=1)
def __init__(self, json_str, runner, master=None):
    j = json.loads(json_str)
    self.name = j['name']
    self.description = j['description']
    self.flag = j['flags'][(len(j['flags']) - 1)]
    self.parameter_type = j['parameter_type']
    self.file_type = 
    self.file_type = j['parameter_type']['FileList']
    self.optional = j['optional']
    default_value = j['default_value']
    self.runner = runner
    ttk.Frame.__init__(self, master)
    self.grid()
    self['padding'] = '0.05i'
    self.label = ttk.Label(self, text=self.name, justify=tk.LEFT)
    self.label.grid(row=0, column=0, sticky=tk.W)
    self.label.columnconfigure(0, weight=1)
    if (not self.optional):
        self.label['text'] = (self.label['text'] + '*')
    fs_frame = ttk.Frame(self, padding='0.0i')
    self.opt = tk.Listbox(fs_frame, width=44, height=4)
    self.opt.grid(row=0, column=0, sticky=tk.NSEW)
    s = ttk.Scrollbar(fs_frame, orient=tk.VERTICAL, command=self.opt.yview)
    s.grid(row=0, column=1, sticky=(tk.N, tk.S))
    self.opt['yscrollcommand'] = s.set
    btn_frame = ttk.Frame(fs_frame, padding='0.0i')
    self.open_button = ttk.Button(btn_frame, width=4, text='...', command=self.select_file)
    self.open_button.grid(row=0, column=0, sticky=tk.NE)
    self.open_button.columnconfigure(0, weight=1)
    self.open_button.rowconfigure(0, weight=1)
    self.delete_button = ttk.Button(btn_frame, width=4, text='del', command=self.delete_entry)
    self.delete_button.grid(row=1, column=0, sticky=tk.NE)
    self.delete_button.columnconfigure(0, weight=1)
    self.delete_button.rowconfigure(1, weight=1)
    btn_frame.grid(row=0, column=2, sticky=tk.NE)
    fs_frame.grid(row=1, column=0, sticky=tk.NSEW)
    fs_frame.columnconfigure(0, weight=10)
    fs_frame.columnconfigure(1, weight=1)
    fs_frame.columnconfigure(2, weight=1)
    self.columnconfigure(0, weight=1)
    self.rowconfigure(0, weight=1)
    self.rowconfigure(1, weight=1)