mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
Only create popup menus on demand to avoid Tcl menu allocation error
This commit is contained in:
parent
d342525ea9
commit
1fc1a5100f
@ -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()
|
||||||
|
@ -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())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user