Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用setOptionBox将OptionBox的值设置为另一个列表_Python_Python 3.x_User Interface_Drop Down Menu_Tkinter - Fatal编程技术网

Python 如何使用setOptionBox将OptionBox的值设置为另一个列表

Python 如何使用setOptionBox将OptionBox的值设置为另一个列表,python,python-3.x,user-interface,drop-down-menu,tkinter,Python,Python 3.x,User Interface,Drop Down Menu,Tkinter,我目前正在使用appJar创建GUI: from appJar import gui listOne = ["first", "set", "of", "values"] listTwo = ["second", "set", "of", "values"] def reset(reset): app.setOptionBox("optionBoxTwo", listTwo) app=gui() app.addOptionBox("optionBoxOne", ["foo", "

我目前正在使用
appJar
创建GUI:

from appJar import gui

listOne = ["first", "set", "of", "values"]
listTwo = ["second", "set", "of", "values"]

def reset(reset):
    app.setOptionBox("optionBoxTwo", listTwo)

app=gui()

app.addOptionBox("optionBoxOne", ["foo", "bar"])
app.setOptionBoxChangeFunction("optionBoxOne", reset)

app.addOptionBox("optionBoxTwo", listOne)

app.go()
我有
选项boxOne
,这些内容在现阶段是不相关的。当更改此选项框的选择时,它将执行
reset
功能。需要将
optionBoxTwo
的值更改为
listwo
。但是,这不起作用,返回时出现以下错误:

Warning - Invalid selection option: ['second', 'set', 'of', 'values']
这表明我只能更改当前显示的值,而不能更改要显示的值。例如,如果我将
reset
功能更改为:

def reset(reset):
    app.setOptionBox("optionBoxTwo", "values")
然后该函数将按预期执行。更改
optionBoxOne
的值后,
optionBoxTwo
的当前显示值将更改为
“值”

我想更改要显示的值。我尝试在添加选项框时使用字典作为参数:

app.addOptionBox("optionBoxOne", {"listOne" : ["foo", "bar"], "listTwo" : ["something"]})
然后在函数中,我声明要显示的列表的键:

def reset(reset):
    app.setOptionBox("optionBoxTwo", listTwo)
然而,这并不像预期的那样有效。相反,选项框中显示的值只是字典的键

如何以这种方式更改选项框中显示的值?我找到了一个解决方法,即删除选项框,然后用所需列表重新添加它:

def reset(reset):
    app.removeOptionBox("optionBoxTwo")
    app.addOptionBox("optionBoxTwo", listTwo)

虽然这似乎有点便宜和不和谐。但它确实取得了预期的结果

根据您的代码,for循环似乎可以解决您的问题。也许试试这样的

def reset(reset):
    for val in listTwo:
        app.setOptionBox("optionBoxTwo", val)

这将遍历列表中的所有值,并为每个值调用
app.setOptionBox

不幸的是,结果并不像预期的那样。这仅将
listwo
的最后一个元素设置为
optionBoxTwo
。请注意,当尝试将
second
设置为
optionBoxTwo
时,返回了一个错误,因为
optionBoxTwo
中不存在
second