从 Tkinter 窗口检索数据

时间:2021-01-11 06:17:54

标签: python tkinter pycharm

enter image description here

我创建了这个 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)?或者其他方式?

1 个答案:

答案 0 :(得分:1)

您可以使用 listdictionary 来存储变量。以下是使用 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()

输出:

enter image description here