2017-03-02 62 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

相關問題