无法从tkinter Entry()获取数据

时间:2014-11-04 02:37:12

标签: python tkinter

我试图让用户输入五个值,单击一个按钮来完成这些值,然后将这些值写入文件。代码:

def mb_add_gui(self):

    self.optionsLabel.grid_forget()



    global a,b,c,d,e


    a = StringVar()
    b = StringVar()
    c = StringVar()
    d = StringVar()
    e = StringVar()


    add_gui_entry_brand = Entry(self.startLabel, textvariable=a).grid(row=0, column=1)
    add_gui_entry_model = Entry(self.startLabel, textvariable=b).grid(row=1, column=1)
    add_gui_entry_serial = Entry(self.startLabel, textvariable=c).grid(row=2,column=1)
    add_gui_entry_work = Entry(self.startLabel, textvariable=d).grid(row=3, column=1)
    add_gui_entry_ram = Entry(self.startLabel,textvariable=e).grid(row=4, column=1)
    add_gui_entry_brand_text = Label(self.startLabel, text="Brand:").grid(row=0, column=0)
    add_gui_entry_model_text = Label(self.startLabel, text="Model:").grid(row=1, column=0)
    add_gui_entry_serial_text = Label(self.startLabel, text="Serial Number:").grid(row=2, column=0)
    add_gui_entry_work_text = Label(self.startLabel, text="Is it working?:").grid(row=3, column=0)
    add_gui_entry_ram_text = Label(self.startLabel, text="RAM Type:").grid(row=4, column=0)

    def final_data():
        global data
        data = [a.get(), b.get(),c.get(),d.get(),e.get()]
        return data

    finalize = Button(self.startLabel, text="Add!", command=final_data).grid(row=5, columnspan=2)

'''允许添加主板'''

def mb_add():


    with open("motherboards.txt", "a") as file:


        file.write("{0}, {1}, {2}, {3}, {4}".format(data[0].upper(), data[1].upper(), data[2].upper(), data[3].upper(), data[4].upper()))
        file.write("\n")
        print("Motherboard added!")
        file.flush()
        file.close()
    return

“”但是,当我运行它时,我得到一个错误,说全局数据变量未定义

1 个答案:

答案 0 :(得分:0)

好的,所以你已经创建了一个全局变量,但是需要在你想要使用它的所有函数中将它定义为全局变量(因此python知道你希望使用那个全局变量,而不是另一个相同的命名局部变量,它顺便找不到)。您也在创建变量,例如finalize,然后将它们放在同一行,这样他们就会返回Nonetype,您必须将它们放在下一行,例如

finalize = Button(self.startLabel, text="Add!", command=final_data)
finalize.grid()

要解决您的问题,您必须将此行添加到mb_add函数:

global data
希望有所帮助!