Help!!! On Tkinter Menu problem!!!

Martin Franklin mfranklin1 at gatwick.westerngeco.slb.com
Wed Nov 30 06:08:22 EST 2005


Xuening wrote:
> 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!!
> 



The Menu Tk Widget has a delete or deletecommand method(s) the first 
accepts an index the second a Menu label, both will remove the menu entry

for more on this...


http://effbot.org/tkinterbook/menu.htm

Regards
Martin




More information about the Python-list mailing list