From 1fc1a5100f0b1cf528746f5d151f2d319a1c3ba3 Mon Sep 17 00:00:00 2001 From: Mark Mine Date: Fri, 14 Nov 2003 00:58:27 +0000 Subject: [PATCH] Only create popup menus on demand to avoid Tcl menu allocation error --- direct/src/tkpanels/DirectSessionPanel.py | 2 ++ direct/src/tkwidgets/Tree.py | 40 ++++++++++++++--------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/direct/src/tkpanels/DirectSessionPanel.py b/direct/src/tkpanels/DirectSessionPanel.py index c4985e6d38..11ecef5488 100644 --- a/direct/src/tkpanels/DirectSessionPanel.py +++ b/direct/src/tkpanels/DirectSessionPanel.py @@ -1003,3 +1003,5 @@ class DirectSessionPanel(AppShell): # Remove hooks for event, method in self.actionEvents: self.ignore(event) + # Destroy SGE hierarchy + self.SGE._node.destroy() diff --git a/direct/src/tkwidgets/Tree.py b/direct/src/tkwidgets/Tree.py index 98dfb2849f..98641a7cd1 100644 --- a/direct/src/tkwidgets/Tree.py +++ b/direct/src/tkwidgets/Tree.py @@ -41,26 +41,17 @@ class TreeNode: self.x = self.y = None self.iconimages = {} # cache of PhotoImage instances for icons self.menuList = menuList - self.menuVar = IntVar() - self.menuVar.set(0) - self._popupMenu = None if self.menuList: if self.menuList[-1] == 'Separator': self.menuList = self.menuList[:-1] - self._popupMenu = Menu(self.canvas, tearoff = 0) - for i in range(len(self.menuList)): - item = self.menuList[i] - if item == 'Separator': - self._popupMenu.add_separator() - else: - self._popupMenu.add_radiobutton( - label = item, - variable = self.menuVar, - value = i, - indicatoron = 0, - command = self.popupMenuCommand) - + self.menuVar = IntVar() + self.menuVar.set(0) + self._popupMenu = None + def destroy(self): + if self._popupMenu: + print 'kill it' + self._popupMenu.destroy() for key in self.kidKeys: c = self.children[key] del self.children[key] @@ -118,7 +109,24 @@ class TreeNode: self.item.OnDoubleClick() return "break" + def createPopupMenu(self): + if self.menuList: + self._popupMenu = Menu(self.canvas, tearoff = 0) + for i in range(len(self.menuList)): + item = self.menuList[i] + if item == 'Separator': + self._popupMenu.add_separator() + else: + self._popupMenu.add_radiobutton( + label = item, + variable = self.menuVar, + value = i, + indicatoron = 0, + command = self.popupMenuCommand) + def popupMenu(self, event=None): + if not self._popupMenu: + self.createPopupMenu() if self._popupMenu: self._popupMenu.post(event.widget.winfo_pointerx(), event.widget.winfo_pointery())