def destroy(self): """Destroy this widget and the associated menu. From Tkinter's OptionMenu""" Menubutton.destroy(self) self._menu = None
def __init__(self, master, items, var=None, defValue=None, noneDisplay='', helpText=None, helpURL=None, callFunc=None, defMenu = None, label = None, abbrevOK = False, ignoreCase = False, autoIsCurrent = False, trackDefault = None, isCurrent = True, postCommand = None, severity = RO.Constants.sevNormal, **kargs): showDefault = not (var and defValue is None) if var is None: var = Tkinter.StringVar() self._tempValue = None self._items = [] self.defValue = None self.noneDisplay = noneDisplay or '' self.ignoreCase = ignoreCase self._helpTextDict = {} self._fixedHelpText = None self.helpText = None self.defMenu = defMenu self._matchItem = RO.Alg.MatchList(abbrevOK = abbrevOK, ignoreCase = ignoreCase) if trackDefault is None: trackDefault = bool(autoIsCurrent) self.trackDefault = trackDefault # handle keyword arguments for the Menubutton # start with defaults, update with user-specified values, if any # then set text or textvariable wdgKArgs = { "borderwidth": 2, "indicatoron": True, "relief": "raised", "anchor": "c", "highlightthickness": 2, } wdgKArgs.update(kargs) for item in ("text", "textvariable"): wdgKArgs.pop(item, None) if label is not None: wdgKArgs["text"] = label else: wdgKArgs["textvariable"] = var self.label = label Menubutton.__init__(self, master = master, helpURL = helpURL, **wdgKArgs) self._menu = Tkinter.Menu(self, tearoff = False, postcommand = postCommand) self["menu"] = self._menu RO.AddCallback.TkVarMixin.__init__(self, var) # do after adding callback support, but before setting default (which triggers a callback) AutoIsCurrentMixin.__init__(self, autoIsCurrent) IsCurrentActiveMixin.__init__(self) SeverityActiveMixin.__init__(self, severity) self.setItems(items, helpText=helpText, checkCurrent = False, checkDefault = False) self.setDefault(defValue, isCurrent = isCurrent, doCheck = True, showDefault = showDefault) # add callback function after setting default # to avoid having the callback called right away if callFunc: self.addCallback(callFunc, callNow=False)