我创建了这个 tkinter 窗口并创建了这些下拉框。
while number != (max+1):
Subject1_Label = Label(master, text=("Subject", number))
Subject1_Label.grid(row=number, column=0, pady=6)
Subject1 = All_Subjects.get(number)
variable = StringVar(master)
variable.set(Subject1[0])
w = OptionMenu(master, variable, *Subject1)
w.grid(row=number, column=1, pady=6)
subject_amount = subject_amount + 1
number = number + 1
通常为了确定下拉框的输入,我可以简单地使用 (variable.get) 但在这种情况下,变量被使用了 5 次来创建 5 个不同的框。有没有办法可以使用它们在 tkinter 窗口上的位置从这些下拉框中收集输入。比如(variable.get, row=1, column=1)?或者其他方式?
答案 0 :(得分:1)
您可以使用 list
或 dictionary
来存储变量。以下是使用 dictionary
的示例:
variables = {}
while number != (max+1):
subject = f"Subject {number}"
Subject1_Label = Label(master, text=subject)
Subject1_Label.grid(row=number, column=0, pady=6)
Subject1 = All_Subjects.get(number)
variable = StringVar(master)
variable.set(Subject1[0])
variables[subject] = variable # save the variable
w = OptionMenu(master, variable, *Subject1)
w.grid(row=number, column=1, pady=6)
subject_amount = subject_amount + 1
number = number + 1
然后您可以使用类似 variables["Subject 1"].get()
的东西来获取“主题 1”的所选项目。
更新示例:
from tkinter import *
# just for providing "All_Subjects.get(number)" in the while loop
class All_Subjects:
subjects = ("math stand", "english standard", "chem", "timber", "child studies")
def get(n):
return All_Subjects.subjects
master = Tk()
max = 5
variables = {}
number = 1
subject_amount = 0
while number != (max+1):
subject = f"Subject {number}"
Subject1_Label = Label(master, text=subject)
Subject1_Label.grid(row=number, column=0, pady=6)
Subject1 = All_Subjects.get(number)
variable = StringVar(master)
variable.set(Subject1[0])
variables[subject] = variable # save the variable
w = OptionMenu(master, variable, *Subject1)
w.grid(row=number, column=1, pady=6)
subject_amount = subject_amount + 1
number = number + 1
def show_subjects():
# use "Subject X" as key to get the selected subjects
for i in range(1, max+1):
subject = f"Subject {i}"
print(f"{subject}: {variables[subject].get()}")
# or simply
#print([var.get() for var in variables.values()])
Button(master, text="Next", command=show_subjects).grid(column=2, padx=10, pady=10)
master.mainloop()
输出: