2015-12-15 49 views
1

我正在试图使一个Optionmenu-Widget与传递变量一起工作。
当用户点击菜单中的选项时,我需要传递两个变量。将变量和选项菜单选择传递给方法

self.frameX = Frame(self.frameTwo, background="red", width= 370, height=35) 
    self.frameX.pack_propagate(0) 
    self.frameX.pack(side=TOP) 

    self.names = [1,2,3,4,5] 

    #Just for demonstration, some random number i 
    #should be saved and passed onchange optionmenu. 
    i = random.randint(0, 10) 

    self.var = StringVar() 
    self.var.set("Numbers") 

    #When the user selects an option, this function should 
    #pass i and the variable, which is what the user selected to the callback function. 
    self.var.trace("w", lambda i=i: self.callback(i, self.var.get())) 

    self.options = OptionMenu(self.frameX, self.var, *self.names) 
    self.options.place(x=180, y=5) 
    self.options.pack() 

    self.frameX.pack() 

def callback(self, n, g): 
    print(n) 
    print(g) 

如果任何人都可以帮我解决这个问题,那将是非常好的和赞赏的。

+0

看来有一些代码缺失,请你张贴http://stackoverflow.com/help/mcve – Altoyyr

+0

我添加了self.names列表。唯一缺少的是frameX,但对于这种特殊情况来说并不重要? – PushALU

+0

我不太熟悉tkinter,但我发现你的问题很有趣。 MCVE会很好,所以像我这样的人可以帮助你。 – Altoyyr

回答

1

如果我理解正确的,你你想要做这样的事情:

import random 
from Tkinter import * 

def callback(sv, i): 
    print sv.get() + str(i); 

master = Tk() 

i = random.randint(0, 10) 

variable = StringVar(master) 
variable.set("one") # default value 
variable.trace("w", lambda name, index, mode, sv=variable: callback(sv, i)) 
w = OptionMenu(master, variable, "one", "two", "three") 
w.pack() 

mainloop() 

正如你所看到的,我通过STRINGVAR本身,所以我可以打电话get()等功能在回调

更改OptionsMenu-值打印,例如

>>two6 
>>one6 
>>three6