2017-03-02 61 views
-1

我想创建一个类,将名称和级联作为参数,并将添加一个项目到GUI的菜单(使用tkinter)。每当我创建一个类的内部变化的变量

的代码看起来是这样的:

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() 

我搜索,找到一种方法,对于这部分重复使用exec(名称),而不是名称(这里我认为这个问题是):

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

但我也明白,exec()是不安全的,并且不宜使用它。

我不能确定我卡在哪里。但我可以使用一些帮助。

+0

当你说“哪里,我相信这个问题是”你指的是什么问题?在你的'newproject = new_menu_item ...'开始的例子中,你打算如何做?创建名为“Edit”的_new_菜单,或将“New Project”添加到名为“Edit”的现有菜单中? –

回答

0

您始终可以创建listdictionary来存储Menu对象。由于Tkinter的自动对任何新的对象产生一个唯一的名称创建

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() 
+0

非常感谢! @abccd – Rafi

+0

“全球项目”是做什么的? @abccd – Rafi

+0

将'projects'放置在全局名称范围内,如果您想要将其更改为'self.projects' – abccd

相关问题