X
Xuening
I have a problem about menu by using Tkinter. I want to make a dynamic
menu. That is when I create a new view/window, one menuitem will be
added to the menu. and when I kill a window, the correponding menuitem
will be deleted. I write a simple code and I can add menuitem now. But
I don't know how to remove the item when I close the window.
The following is my code:
==============================
from Tkinter import*
class App:
def __init__(self):
root=Tk()
self.root=root
self.doMenus()
root.config(menu=self.mBar)
delete=deletewindow()
self.root.mainloop()
def doMenus(self):
mBar=Menu(self.root)
self.mBar=mBar
self.doFileMenu()
self.doWindowMenu()
def doFileMenu(self):
filemenu = Menu(self.mBar,tearoff=0,background='yellow')
filemenu.add_command(label='New
window',underline=0,command=self.newWindow)
filemenu.add('separator')
filemenu.add_command(label='Quit',underline=0,command=self.root.destroy)
self.filemenu=filemenu
self.mBar.add_cascade(label="File", menu=self.filemenu)
def doWindowMenu(self):
WinName = Menu(self.mBar,
tearoff=0,postcommand=self.windowListUpdate)
self.windowMenu=WinName
self.mBar.add_cascade(label="Window", menu=self.windowMenu)
self.windowList=[]
self.nWindows=0
def windowListUpdate(self):
self.windowMenu.delete(0, END)
for window in self.windowList:
self.windowMenu.add_command(label=window)
def newWindow(self):
self.nWindows+=1
windowName = "Window %d"% self.nWindows
self.windowList.append(windowName)
self.windowListUpdate()
root2=Tk()
self.root2=root2
self.root2.title(windowName)
canvas=Canvas(self.root2, width=450,height=300,bg='green')
canvas.pack()
self.canvas=canvas
if __name__ == '__main__':
test=App()
Maybe I should bind something to <destroy> event. Everytime I close the
window, the name of the window should be removed from the windowList
and refresh the all the menuitems again. But I don't know how and
where to add the "destroy" event. Can anyone give me a hand????
Thanks a lot!!
menu. That is when I create a new view/window, one menuitem will be
added to the menu. and when I kill a window, the correponding menuitem
will be deleted. I write a simple code and I can add menuitem now. But
I don't know how to remove the item when I close the window.
The following is my code:
==============================
from Tkinter import*
class App:
def __init__(self):
root=Tk()
self.root=root
self.doMenus()
root.config(menu=self.mBar)
delete=deletewindow()
self.root.mainloop()
def doMenus(self):
mBar=Menu(self.root)
self.mBar=mBar
self.doFileMenu()
self.doWindowMenu()
def doFileMenu(self):
filemenu = Menu(self.mBar,tearoff=0,background='yellow')
filemenu.add_command(label='New
window',underline=0,command=self.newWindow)
filemenu.add('separator')
filemenu.add_command(label='Quit',underline=0,command=self.root.destroy)
self.filemenu=filemenu
self.mBar.add_cascade(label="File", menu=self.filemenu)
def doWindowMenu(self):
WinName = Menu(self.mBar,
tearoff=0,postcommand=self.windowListUpdate)
self.windowMenu=WinName
self.mBar.add_cascade(label="Window", menu=self.windowMenu)
self.windowList=[]
self.nWindows=0
def windowListUpdate(self):
self.windowMenu.delete(0, END)
for window in self.windowList:
self.windowMenu.add_command(label=window)
def newWindow(self):
self.nWindows+=1
windowName = "Window %d"% self.nWindows
self.windowList.append(windowName)
self.windowListUpdate()
root2=Tk()
self.root2=root2
self.root2.title(windowName)
canvas=Canvas(self.root2, width=450,height=300,bg='green')
canvas.pack()
self.canvas=canvas
if __name__ == '__main__':
test=App()
Maybe I should bind something to <destroy> event. Everytime I close the
window, the name of the window should be removed from the windowList
and refresh the all the menuitems again. But I don't know how and
where to add the "destroy" event. Can anyone give me a hand????
Thanks a lot!!