def _select_option(self, root, title, label, columns, data, return_column): import Tkinter import ttk rows = [' '.join(row) for row in data] result = self._Object(selection=None) dialog = Tkinter.Toplevel(root) dialog.title(title) tklabel = ttk.Label(dialog, text=label) tklabel.pack(padx=5, pady=2, anchor=Tkinter.W) listbox = Tkinter.Listbox(dialog, listvariable=Tkinter.StringVar(value=tuple(rows)), height=len(rows), activestyle='dotbox') listbox.pack(expand=True, fill=Tkinter.BOTH, padx=5, pady=5) def submit(): idxs = listbox.curselection() if len(idxs) == 1: result.selection = int(idxs[0]) dialog.quit() button = ttk.Button(dialog, text=u"Ok", command=submit, default='active') button.pack(pady=5, padx=5, side=Tkinter.RIGHT) listbox.bind('<Double-1>', lambda e: submit()) dialog.bind('<Return>', lambda e: submit()) dialog.bind('<Escape>', lambda e: dialog.quit()) dialog.protocol('WM_DELETE_WINDOW', dialog.quit) dialog.update() dialog.minsize(dialog.winfo_width() + 50, dialog.winfo_height()) dialog.after(1, lambda: listbox.focus_force()) root.mainloop() if result.selection is not None: return data[result.selection][return_column - 1] else: return None
def _select_option(self, root, title, label, columns, data, return_column): import tkinter import tkinter.ttk rows = [' '.join(row) for row in data] result = self._Object(selection=None) dialog = tkinter.Toplevel(root) dialog.title(title) tklabel = tkinter.ttk.Label(dialog, text=label) tklabel.pack(padx=5, pady=2, anchor=tkinter.W) listbox = tkinter.Listbox(dialog, listvariable=tkinter.StringVar(value=tuple(rows)), height=len(rows), activestyle='dotbox') listbox.pack(expand=True, fill=tkinter.BOTH, padx=5, pady=5) def submit(): idxs = listbox.curselection() if len(idxs) == 1: result.selection = int(idxs[0]) dialog.quit() button = tkinter.ttk.Button(dialog, text=u"Ok", command=submit, default='active') button.pack(pady=5, padx=5, side=tkinter.RIGHT) listbox.bind('<Double-1>', lambda e: submit()) dialog.bind('<Return>', lambda e: submit()) dialog.bind('<Escape>', lambda e: dialog.quit()) dialog.protocol('WM_DELETE_WINDOW', dialog.quit) dialog.update() dialog.minsize(dialog.winfo_width() + 50, dialog.winfo_height()) dialog.after(1, lambda: listbox.focus_force()) root.mainloop() if result.selection is not None: return data[result.selection][return_column - 1] else: return None
def submit(): idxs = listbox.curselection() if len(idxs) == 1: result.selection = int(idxs[0]) dialog.quit()