Python OptionMenu uuu init uuuu()缺少1个必需的位置参数:';价值';

Python OptionMenu uuu init uuuu()缺少1个必需的位置参数:';价值';,python,tkinter,Python,Tkinter,我在尝试将文本框中包含的结尾为(1)或(2)的单词分成2选项菜单时遇到问题。错误是\uuuu init\uuuu()缺少1个必需的位置参数:“value”,该参数出现在第26(和第27)行:opt1=OptionMenu(root,var1,*spl()[0])。如果你看一看,我会很感激的 root=Tk() text=Text(root,height=10,width=40) text.pack() def spl(): Get=text.get(1.0,END) Get=G

我在尝试将
文本
框中包含的结尾为(1)或(2)的单词分成2
选项菜单
时遇到问题。错误是
\uuuu init\uuuu()缺少1个必需的位置参数:“value”
,该参数出现在第26(和第27)行:
opt1=OptionMenu(root,var1,*spl()[0])
。如果你看一看,我会很感激的

root=Tk()
text=Text(root,height=10,width=40)
text.pack()

def spl():
    Get=text.get(1.0,END)
    Get=Get.split()    
    A=[]
    B=[]
    for i in range(len(Get)):
        if Get[i][:-4:-1] == '(1)':
            A.append(Get[i])
        elif Get[i][:-4:-1] == '(2)':
            B.append(Get[i])
        else:
            continue
    return A,B

btn=Button(root,command=spl,text='Refresh')
btn.pack()
var1=IntVar()
var1.set('1st list')
var2=IntVar()
var2.set('2nd list')
opt1=OptionMenu(root,var1,*spl()[0])
opt2=OptionMenu(root,var2,*spl()[1])
opt1.pack()
opt2.pack()
root.mainloop()
“OptionMenu”的第三个参数是tuple。始终是元组,而不是一个元素

def spl():
    ...
    return A,B
opt1=OptionMenu(root,var1, *tuple(spl()))

多亏了@fhdrsdg,我修复了这个代码。也许我修理它的方法不专业,但至少它是有效的。(我没有为空数组A和B编写异常,但我认为这应该不难)


你能发布完整的错误回溯吗?另外,你能给你的变量/函数起个更明显的名字吗?你的例子缺少一个关键的细节:import语句。您使用的是tkinter optionmenu还是ttk optionmenu?我使用tkinter的optionmenu运行此代码时,直接执行
spl
以填充optionmenu。但是,由于此时文本小部件仍然为空,因此它将返回空列表。如果没有选项,则无法生成OptionMenu,因此会出现错误。而且,
get[i][:-4:-1]
是错误的。它确实获取最后三个字符,但顺序相反。因此,当字符串以
(1)
结尾时,您将得到
)1(
),并且您的比较将永远不会为真。使用
get[i][3:][/code>。那么我应该做些什么来创建例如带有参数a的第一个OptionMenu?
OptionMenu
初始化语句看起来像
def\uu init\uuuuu(self、master、variable、value、*values、**kwargs)
。因此第三个参数是
value
,它应该是一个字符串。之后所有未命名的参数都被收集到
values
,然后成为字符串的元组。之后,唯一允许的关键字参数是
command
root=Tk()
text=Text(root,height=10,width=40)
text.pack()

def spl():
    Get=text.get(1.0,END)
    Get=Get.split(',') 
    A=[]
    B=[]
    for i in range(len(Get)):
        if Get[i][-3:] == '(1)':
            A.append(Get[i])
        elif Get[i][-3:] == '(2)':
            B.append(Get[i])
        else:
            continue
    global opt1,opt2
    opt1.destroy()
    opt2.destroy()
    opt1=OptionMenu(root,var1,*A)
    opt1.pack()
    opt2=OptionMenu(root,var2,*B)    
    opt2.pack()


var1=IntVar()
var1.set('1st list')
var2=IntVar()
var2.set('2nd list')
opt1=OptionMenu(root,var1,value='0')
opt2=OptionMenu(root,var2,value='0')
btn=Button(root,command=spl,text='Refresh')
btn.pack()

opt1.pack()
opt2.pack()
root.mainloop()