tkinker optionmenu未显示所选结果

时间:2017-07-21 11:33:17

标签: python-3.x tkinter optionmenu

import tkinter

window = tkinter.Tk()

def abc(event):
     ans=0
    numberss=['7','8','9']
    omenu2['menu'].delete(0, 'end')
    for number in numberss:
        omenu2['menu'].add_command(label=numberss[ans], command=efg)
        ans=ans+1


def efg(event=None):
    print('yee')

numbers = ['1','2', '3']
number=['4','5','6']

var = tkinter.StringVar(window)
var1 = tkinter.StringVar(window)


omenu = tkinter.OptionMenu(window, var, *numbers, command = abc)
omenu.grid(row=1)
omenu2 = tkinter.OptionMenu(window, var1, *number, command = efg)
omenu2.grid(row=2)

输入第一个选项菜单后,它将更新第二个选项菜单。当您将数据输入第二个数据时,它会运行命令,但不会显示您输入的内容。我不想包含一个按钮,我知道该命令有效,而不是第二个

我发现一些代码改变了第二个菜单的选项,但是当我运行它时,命令不会工作,因为它被改为tkinter.setit(我也想知道它是做什么的。)目前不了解它)

omenu2['menu'].add_command(label=numberss[ans], command=tkinter._setit(var1, number))

这是从更大的代码中获取的,并且抛出了相同的错误

1 个答案:

答案 0 :(得分:1)

您应该设置StringVar(var1)新值。

def abc(event): 
    numberss=['7','8','9']
    omenu2['menu'].delete(0, 'end')
    for number in numberss:
        omenu2['menu'].add_command(label=number, command=lambda val=number: efg(val))

def efg(val, event=None):
    print('yee')
    var1.set(val)

您正在使用for循环,因此您不需要ans(至少不在此代码中),因为它会迭代项本身。