将StringVars保存为文本和全局变量问题

时间:2014-09-16 10:09:34

标签: python-3.x tkinter global-variables

这是我的第一个使用tkinter的项目,我在使用StringVars时遇到了一些问题。我正在尝试创建一个程序,用户可以在其中输入信息,然后将其保存到txt文档,简化代码为。

def New_Condition():

    def Global_Vars():
        global Str_Name
        Str_Name = StringVar()
        global Str_Eff
        Str_Eff = StringVar()

    Global_Vars()
    Gui = Tk()

    def Save_Condition():
        CND_InfoList = [StringVar.get(Str_Name),StringVar.get(Str_Eff)]
        TXT_CND = open("C:\\Users\\Clark\\DnD\\Conditiontxt\\Conditions.txt","a")
        TXT_CND.write("$".join(CND_Info_List) + "$\n")
        TXT_CND.close()

    Name = Entry(textvariable = Str_Name).pack()
    Eff =  Entry(textvariable = Str_Eff).pack()
    Save = Button(text = "Save",command = Save_Condition).pack()

    Gui.mainloop()

程序将保存到文本文件,但它只保存空白而不是输入框中的用户输入。

我不确定错误是否与我声明全局变量的方式有关,或者它是否与StringVar本身有关。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

问题的关键在于您在创建StringVar实例之前创建了Tk的实例。您必须始终在创建窗口小部件或StringVar之前初始化tkinter。当我在创建Gui = Tk()之前移动StringVar时,您的代码就可以运行。

根据对原始问题的一些评论,您说您正在创建Tk的多个实例。这也可能导致意外问题。如果您需要创建其他窗口,则需要创建Toplevel而不是Tk的实例。您的程序应始终只有Tk的一次实例,并且需要在任何其他Tkinter对象之前创建它。