-1

I'm trying to create a class that will take name and cascade as params and will add an item to the GUI's menu (using tkinter).

The code looks like this:

from tkinter import *

class new_menu_item:

    def __init__(self, name, cascade):
        self.name = name
        self.cascade = cascade
        menu = Menu(root)
        root.config(menu=menu)
        name = Menu(menu)
        menu.add_cascade(label=cascade, menu=name)
        name.add_command(label = name)
root = Tk()
newproject = new_menu_item('New Project', 'Edit')
oldproject = new_menu_item('Add employee', 'File')

root.mainloop()

I searched and found a way to use exec(name) instead of name for this part (Where I believe the problem is):

name = Menu(menu)
menu.add_cascade(label=cascade, menu=name)

But I also understood that exec() is unsafe and it's prefarable not to use it.

I'm not quit sure where i get stuck. But I can use some help.

NotSoShabby
  • 3,316
  • 9
  • 32
  • 56
  • When you say "Where I believe the problem is", what problem are you referring to? In your example beginning with `newproject = new_menu_item...`, what do you intend for that to do? Create a _new_ menu named "Edit", or add "New Project" to an existing menu named "Edit"? – Bryan Oakley Mar 02 '17 at 14:13

1 Answers1

0

You can always create a list or dictionary to store the Menu object. Since tkinter automatically generate a unique name for any new object created

from tkinter import *

class new_menu_item:

    def __init__(self, name, cascade):
        global projects
        self.name = name
        self.cascade = cascade
        menu = Menu(root)
        root.config(menu=menu)
        name = Menu(menu)
        menu.add_cascade(label=cascade, menu=name)
        name.add_command(label = name)
        projects[name] = menu  #stores name and menu into a dictionary 
root = Tk()
projects={}
newproject = new_menu_item('New Project', 'Edit')
oldproject = new_menu_item('Add employee', 'File')

root.mainloop()
Taku
  • 31,927
  • 11
  • 74
  • 85