这是我的第一个使用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本身有关。谢谢你的帮助。
答案 0 :(得分:0)
问题的关键在于您在创建StringVar
实例之前创建了Tk
的实例。您必须始终在创建窗口小部件或StringVar
之前初始化tkinter。当我在创建Gui = Tk()
之前移动StringVar
时,您的代码就可以运行。
根据对原始问题的一些评论,您说您正在创建Tk
的多个实例。这也可能导致意外问题。如果您需要创建其他窗口,则需要创建Toplevel
而不是Tk
的实例。您的程序应始终只有Tk
的一次实例,并且需要在任何其他Tkinter对象之前创建它。