Only create popup menus on demand to avoid Tcl menu allocation error

This commit is contained in:
Mark Mine 2003-11-14 00:58:27 +00:00
parent d342525ea9
commit 1fc1a5100f
2 changed files with 26 additions and 16 deletions

View File

@ -1003,3 +1003,5 @@ class DirectSessionPanel(AppShell):
# Remove hooks # Remove hooks
for event, method in self.actionEvents: for event, method in self.actionEvents:
self.ignore(event) self.ignore(event)
# Destroy SGE hierarchy
self.SGE._node.destroy()

View File

@ -41,26 +41,17 @@ class TreeNode:
self.x = self.y = None self.x = self.y = None
self.iconimages = {} # cache of PhotoImage instances for icons self.iconimages = {} # cache of PhotoImage instances for icons
self.menuList = menuList self.menuList = menuList
self.menuVar = IntVar()
self.menuVar.set(0)
self._popupMenu = None
if self.menuList: if self.menuList:
if self.menuList[-1] == 'Separator': if self.menuList[-1] == 'Separator':
self.menuList = self.menuList[:-1] self.menuList = self.menuList[:-1]
self._popupMenu = Menu(self.canvas, tearoff = 0) self.menuVar = IntVar()
for i in range(len(self.menuList)): self.menuVar.set(0)
item = self.menuList[i] self._popupMenu = None
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 destroy(self): def destroy(self):
if self._popupMenu:
print 'kill it'
self._popupMenu.destroy()
for key in self.kidKeys: for key in self.kidKeys:
c = self.children[key] c = self.children[key]
del self.children[key] del self.children[key]
@ -118,7 +109,24 @@ class TreeNode:
self.item.OnDoubleClick() self.item.OnDoubleClick()
return "break" 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): def popupMenu(self, event=None):
if not self._popupMenu:
self.createPopupMenu()
if self._popupMenu: if self._popupMenu:
self._popupMenu.post(event.widget.winfo_pointerx(), self._popupMenu.post(event.widget.winfo_pointerx(),
event.widget.winfo_pointery()) event.widget.winfo_pointery())