Help!!! On Tkinter Menu problem!!!

Xuening xueli718 at gmail.com
Wed Nov 30 02:40:17 EST 2005


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!!




More information about the Python-list mailing list