【问题标题】:Variable that changes each time I creat an instense of a class每次创建类的实例时都会更改的变量
【发布时间】:2017-03-02 07:24:14
【问题描述】:

我正在尝试创建一个将名称和级联作为参数的类,并将一个项目添加到 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) 而不是 name 的方法(我认为问题出在哪里):

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

但我也明白 exec() 是不安全的,最好不要使用它。

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

【问题讨论】:

  • 当您说“我认为问题出在哪里”时,您指的是什么问题?在您以newproject = new_menu_item... 开头的示例中,您打算这样做吗?创建一个名为“Edit”的菜单,或者将“New Project”添加到一个名为“Edit”的现有菜单中?

标签: python class tkinter cascade


【解决方案1】:

您始终可以创建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()

【讨论】:

  • 非常感谢! @abccd
  • “全球项目”是做什么的? @abccd
  • projects放在全局名称范围内,如果需要,可以将其更改为self.projects
猜你喜欢
  • 2018-06-25
  • 1970-01-01
  • 2018-12-09
  • 2018-09-07
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
相关资源
最近更新 更多