2014-02-25 43 views
0

我希望用戶能夠從下拉框中選擇一個選項('其他'),然後讓輸入框出現一列。我希望此功能可以用於其他30個下拉菜單。如果用戶在Tkinter中選擇「其他」,則創建一個額外的輸入框

self.ea_tf = StringVar() 
    self.ea_tf.set(fixtures[0]) 
    self.e33 = OptionMenu(self.frame1, self.ea_tf, *fixtures, command=self.other_entry(15, "e33", "ea_tf")) 
    self.e33.grid(row=15, column=5, stick=E+W) 

下面是函數, 'other_entry':

 def other_entry(self, selection, row, el, var): 
    if selection == "Other": 
     self.var = StringVar() 
     self.el = Entry(self.frame1, textvariable=self.var) 
     self.el.grid(row=row, column=6) 

它與錯誤出現: 「應用程序實例沒有屬性 '選擇'。」有了其他功能,它會自動給出參數「選擇」。我如何使選擇的一個參數?

+0

我是否需要以某種方式使用拉姆達? – Cole

回答

0

您的示例中有不正確的縮進。

def other_entry(self, selection, row, el, var): 
     if selection == "Other": 
      self.var = StringVar() 
      self.el = Entry(self.frame1, textvariable=self.var) 
      self.el.grid(row=row, column=6) 

旁邊:command預計只有函數名,而不()

OptionMenu(..., command=onSelectionChange) 

def onSelectionChange(self, selection): 
    print selection 

使用運行other_entry(...)和結果分配給command作爲函數名command=self.other_entry(15, "e33", "ea_tf")。你的other_entry()沒有return,所以它返回None(默認),所以你有command=None

大多數小部件只發送一個agument功能分配給command。如果你想發送更多的參數,你需要lambda


所以可能你需要lambda功能

OptionMenu(..., command=lambda selection:self.other_entry(selection, 15, "e33", "ea_tf")) 

def other_entry(self, selection, row, el, var): 
    print selection, row, el, var 
+0

謝謝。這工作。我不知道選擇可以這樣工作。 – Cole

相關問題