class Settings: def __init__(self, config): self.config = config def show(self): self.win = ThemedTk(title='settings') self.win.rowconfigure(1, weight=1) self.win.columnconfigure(1, weight=1) row = 0 self.win.rowconfigure(row, minsize=10) row += 1 l = tk.Label(self.win, text='Engine configuration', font=self.win.boldfont) l.grid(row=row, column=0, columnspan=2, sticky='w') self.show_help = tk.Button(self.win, text='?', command=self.launch_help) self.show_help.grid(row=row, column=2, sticky='e') self.entries = {} for name in self.config.keys(): row += 1 l = tk.Label(self.win, text=name) l.grid(row=row, column=0, sticky='w') self.entries[name] = tk.Entry(self.win) self.entries[name].grid(row=row, column=1, columnspan=2, sticky='ew') self.entries[name].insert(0, self.config[name]) row += 1 self.win.rowconfigure(row, minsize=10) row += 1 frame = tk.Frame(self.win) frame.grid(row=row, column=0, columnspan=3) save = tk.Button(frame, text='save', command=self.save_cb) save.pack(side='left') cancel = tk.Button(frame, text='cancel', command=self.cancel_cb) cancel.pack(side='left') self.win.bind('<Escape>', lambda x: self.win.close()) def launch_help(self, e=None): open_help(page='gui', anchor='configuring-kvarq') def save_cb(self, e=None): # check whether parameters have correct format newconfig = dict(self.config) for name in self.config.keys(): try: newconfig[name] = int(self.entries[name].get()) except ValueError, e: tkMessageBox.showerror( 'invalid value', 'parameter "%s" must be an integer' % name) return # save new settings for name, value in newconfig.items(): self.config[name] = value self.win.destroy()