Tkinter 组合框再次循环。得到结果
Tkinter combobox loop again. Getting the results
我通过循环列表创建了一组组合框,并且
使用字典键作为项目 em 组合列表。问题:我无法将结果返回到 'results' 列表。所有组合框同时更改。我研究了有关该主题的其他帖子,但我无法理解解决方案中涉及的概念。
总而言之:代码生成 3 个组合框,但它们一起改变,我无法附加结果。
提前感谢您的帮助:
#--------------------代码
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())
我通过循环列表创建了一组组合框,并且 使用字典键作为项目 em 组合列表。问题:我无法将结果返回到 'results' 列表。所有组合框同时更改。我研究了有关该主题的其他帖子,但我无法理解解决方案中涉及的概念。 总而言之:代码生成 3 个组合框,但它们一起改变,我无法附加结果。
提前感谢您的帮助:
#--------------------代码
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())