再次输入组合框循环.得到结果



我通过循环列表和创建了一组组合框使用字典键作为项目组合符。问题:我无法将结果返回到"结果"列表。所有组合框同时更改。我研究了其他关于这个主题的帖子,但我无法理解解决方案中涉及的概念。总而言之:代码生成3个组合框,但它们一起更改,并且我不能附加结果。

Thanks for your help, in advance:

#----------------------- 代码

from tkinter import 
from tkinter import ttk
win = Tk()
win.geometry('400x600')
win.title('combobox')

result =[] #--> the new list with results of comboboxes
opts = StringVar()
anyFruits =['any_grape', 'any_tomato', 'any_banana'] 
#--> list just to generate the loop 

fruits = {'specialgrape':'specialgrape', 'specialtomato':'specialtomato','specialbanana':'specialbanana'}
#--> dictonary to generate drop down options menu (key of dict)
for index, fruit in enumerate(anyFruits):
mycombo = ttk.Combobox(win, 
values= (list(fruits.keys())),textvariable=opts)
mycombo.bind('<<ComboboxSelected>>', lambda event, index=index: fruit_callBack(index, event))

mycombo.pack()


def fruit_callBack(index, event):

for opts in mycombo:

result.append(opts)

def print_():        
print(result)

bt = Button(win,command= print_)
bt.pack()
win.mainloop()

因为所有的Combobox都有相同的textvariable,所以所有的值都一起改变。因此,其中一个的变化将迫使其他的保持相同的值。无论如何,你追加它错了,你不需要在index传递,只是传递组合框本身,并追加它里面的值:

for index, fruit in enumerate(anyFruits):
mycombo = ttk.Combobox(win,values=list(fruits.keys()))
mycombo.bind('<<ComboboxSelected>>',lambda e,cmb=mycombo: fruit_callBack(e,cmb))   
mycombo.pack()

def fruit_callBack(event,cmb):
result.append(cmb.get())

相关内容

  • 没有找到相关文章

最新更新