2015-12-15 85 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