Dictionary 使用字典中的名称列表绑定多个组合框

Dictionary 使用字典中的名称列表绑定多个组合框,dictionary,tkinter,combobox,bind,Dictionary,Tkinter,Combobox,Bind,我正在设计一个GUI,以减少我的同事报告测试所花费的时间。我为测试计划了多个组合框。在做出选择之后,我想把它们收集到一本由确定的名称和选择组成的词典中。我管理了将名称绑定到字典的操作,但值: 阿契夫={“简”:斯特林瓦尔,“莉莉”:斯特林瓦尔“哈里”:斯特林瓦尔,“约翰”:斯特林瓦尔} 我尝试了绑定和跟踪方法,但这是我能得到的最好结果。你有什么建议? PS:我不知道如何使用类方法。 这是我的简化代码(我不想让你的思维与医学测试混淆,我所需要的是将考试结果与名为“Archieve”的字典中的学生姓

我正在设计一个GUI,以减少我的同事报告测试所花费的时间。我为测试计划了多个组合框。在做出选择之后,我想把它们收集到一本由确定的名称和选择组成的词典中。我管理了将名称绑定到字典的操作,但值: 阿契夫={“简”:斯特林瓦尔,“莉莉”:斯特林瓦尔“哈里”:斯特林瓦尔,“约翰”:斯特林瓦尔} 我尝试了绑定和跟踪方法,但这是我能得到的最好结果。你有什么建议? PS:我不知道如何使用类方法。 这是我的简化代码(我不想让你的思维与医学测试混淆,我所需要的是将考试结果与名为“Archieve”的字典中的学生姓名结合起来):

将tkinter作为tk导入
从tkinter导入ttk
root=tk.tk()
root.configure(bg=“白色”)
学生=[“简”、“莉莉”、“哈利”、“约翰”]
选项=[“无数据”、“通过”、“失败”]
阿尔切夫={}
def保存(var):
全局名称
Archieve[Name]=var
对于范围内的i(len(学生)):
姓名=学生[i]
tk.Label(root,text=Name,bg=“white”).grid(行=i+1,列=0)
var=tk.StringVar()
Combobox4=ttk.Combobox(根,值=选项,文本变量=变量)
Combobox4.当前(0)
Combobox4.bind(“,SAVE(Name,var))
变量跟踪(“w”,保存(名称,变量))
Combobox4.grid(行=i+1,列=1)
root.mainloop()

每当组合框值之一发生更改时,您需要将学生姓名和所选选项传递给
SAVE()
函数:

将tkinter作为tk导入
从tkinter导入ttk
root=tk.tk()
root.configure(bg=“白色”)
学生=[“简”、“莉莉”、“哈利”、“约翰”]
选项=[“无数据”、“通过”、“失败”]
#初始化Archieve字典
Archieve={name:Options[0]用于学生姓名}
def保存(名称,val):
阿基耶夫[姓名]=瓦尔
打印(存档)
对于i,枚举中的姓名(学生):
tk.Label(root,text=Name,bg=“white”).grid(行=i+1,列=0)
Combobox4=ttk.Combobox(根,值=选项)
Combobox4.grid(行=i+1,列=1)
Combobox4.bind(“”,lambda e,name=name:SAVE(name,e.widget.get())
Combobox4.当前(0)
root.mainloop()

请注意,没有使用tkinter变量。

Combox4.bind(“,SAVE(Name,var))
更改为
Combox4.bind(“,lambda e,Name=Name,var=var:SAVE(Name,var))
var.trace(“w”,SAVE(Name,var))
更改为
var.trace(“w”,lambda*,Name=Name,var:SAVE(Name,var))
感谢您友好的回答,尽管如此,答案还是一样。我将代码更改如下:def SAVE(var):Archieve[Name]=var for I in range(len(Students)):Name=Students[I]tk.Label(root,text=Name,bg=“white”).grid(row=I+1,column=0)var=tk.StringVar()Combox4=ttk.Combox4(root,value=Options,textvariable=var)Combox4.current(0)Combox4.bind(',lambda e,Name=Name,var=var:SAVE(Name,var))var.trace(“w”,lambda*),Name=Name,var=var:SAVE(Name,var))Combobox4.grid(row=i+1,column=1)对不起,我没有得到您想要的。非常感谢acw1668,它能工作!最后一个问题:如果我想在不同的列表中使用字典,那么使用*args就足够了吗?没关系,我可以使用不同的字典来存储我的数据,但我想学习正确的方法。在我原来的程序中,会有五到六个名字列表(而不是学生)。如何使用SAVE函数将所有列表绑定到我的字典(此处为archive)。我可以使用多个字典,然后将它们更新为一个主字典,但有没有简单(或正确)的方法?
SAVE()
函数接受
name
val
参数,因此基本上可以在其他列表中使用。但是Archieve只识别学生,我如何将其转换为多个?Archieve={name:Options[0]用于学生姓名}
import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.configure(bg="white")

Students=["Jane", "Lily", "Harry", "John"]
Options=["No Data", "Passed", "Failed"]
Archieve={}

def SAVE(var):
    global Name
    Archieve[Name]=var

for i in range(len(Students)):
    Name=Students[i]
    tk.Label(root, text=Name, bg="white").grid(row=i+1, column=0)
    var = tk.StringVar()
    Combobox4=ttk.Combobox(root, value=Options, textvariable=var)
    Combobox4.current(0)
    Combobox4.bind("<<ComboboxSelected>>", SAVE(Name, var))
    var.trace("w", SAVE(Name, var))
    Combobox4.grid(row=i+1, column=1)

root.mainloop()