2017-06-07 34 views
0

当我更改1个选项菜单的值时,所有我的选项菜单窗口小部件都一起更新。为什么我更改一个菜单的值时,我的所有tkinter选项都会更新?

这是我用什么来让所有的菜单(self.var被初始化为self.var = StringVar(master)):

def makeMenu(self, name, items, r, c): 

    self.var.set(items[0]) 
    name = OptionMenu(self, self.var, *items) 
    name.grid(row = r, column = c , padx = self.pad_x, pady = self.pad_y) 
    name.config(width = self.menu_width) 
    name.menu = Menu(name, tearoff = self.tear_off) 

    for i in range(len(items)): 
     name.menu.add_command(label = items[i]) 

    return name 

当我尝试做一个新的菜单并更改项目,其他所有的菜单项目改为新的。

即当我这样做:

self.layout_menu = self.makeMenu("layout_menu", self.layout_sections, 
           self.layout_menu_row, self.layout_menu_col) 
+0

我可以看到代码的休息吗? – Stiffy2000

+0

这是一个很多的代码。哈哈你介意指定吗?所以我有一个Tk()窗口的类。如上所示初始化“var”。我的班级中有这些参数的makeMenu函数。我的createWidgets函数,没有参数,调用makeMenu使用self.layout_menu = self.makeMenu(“layout_menu”,self.layout_sections,self.row_count,self.col_count)使默认菜单。所以我想要做的是当用户点击一个列表框中的项目时,这些菜单会更新相应的值。当我尝试用值更新一个值时,所有菜单都会使用该值 –

+1

@E进行更新。 Oregel:当Stiffy2000要求查看更多代码时,我相信他指的是[最小,完整和可验证示例](https://stackoverflow.com/help/mcve)。我们需要能够测试代码来查看整体问题。 –

回答

0

我真的不认为你需要StringVar(master),你只需要StringVar()

+0

这个工程!谢谢! –

+0

发生了什么事是它为我的所有菜单创建了一个var [0],这意味着它们基本上都是由一个变量控制的,所以每当一个菜单发生变化时,其他变化也是如此。 –

相关问题