From 20bddd075e1fd97d073e2f0be1037471d0647d5f Mon Sep 17 00:00:00 2001 From: Richard Jarvis Date: Tue, 9 Aug 2016 23:31:32 +0900 Subject: [PATCH] Update tick box optionmenu (#42) Cleaned up tick box optionmenu: * Now only shows tick boxes in drop-down * get function now returns dictionary of options with boolean --- appjar.py | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/appjar.py b/appjar.py index cd131b6..5ca6e0b 100755 --- a/appjar.py +++ b/appjar.py @@ -1920,8 +1920,9 @@ def __buildOptionBox(self, frame, title, options, kind="normal"): option.kind="normal" elif kind == "ticks": ## http://stackoverflow.com/questions/29019760/how-to-create-a-combobox-that-includes-checkbox-for-each-item - option = OptionMenu(frame,variable=var,value="- options -") - option["menu"].entryconfigure(0, state="disabled") + option = OptionMenu(frame,variable=var,value="") + # delete the empty value we just added + option['menu'].delete(0, 'end') var.set(title) vals = [] for o in options: @@ -1977,18 +1978,25 @@ def addLabelOptionBox(self, title, options, row=None, column=0, colspan=0, rowsp def getOptionBox(self, title): self.__verifyItem(self.n_optionVars, title) val=self.n_optionVars[title] + if type(val) == list: - vals=[] - for v in val: - if v.get(): vals.append(True) - else: vals.append(False) + ## get list of values ## + menu = self.n_options[title]["menu"] + last = menu.index("end") + items = [] + for index in range(last+1): + items.append(menu.entrycget(index, "label")) + ######################## + vals={} + for pos, v in enumerate(val): + if v.get(): vals[items[pos]] = True + else: vals[items[pos]] = False return vals - - val = val.get().strip() - # set to None if it's a divider - if val.startswith("-") or len(val) == 0: val = None - - return val + else: + val = val.get().strip() + # set to None if it's a divider + if val.startswith("-") or len(val) == 0: val = None + return val def __disableOptionBoxSeparators(self, box): # disable any separators