我想将输入框的输入内容保存到.txt
文件中,并且它适用于第一个代码而不是第二个代码,但是我需要使用的是第二个代码。
代码1:
import tkinter as tk
def f():
def save():
a = t.get()
f = open((a + '.txt'), 'w')
f.write(a)
f.close()
return
top = tk.Tk()
t = tk.StringVar()
e = tk.Entry(top, textvariable = t).pack()
b = tk.Button(top, text = 'Save as a file', command = save).pack()
top.mainloop()
f()
代码2:
import tkinter as tk
root = tk.Tk()
def f():
def save():
a = t.get()
f = open((a + '.txt'), 'w')
f.write(a)
f.close()
return
top = tk.Tk()
t = tk.StringVar()
e = tk.Entry(top, textvariable = t).pack()
b = tk.Button(top, text = 'Save as a file', command = save).pack()
top.mainloop()
button = tk.Button(root, text="Button",command=f).pack()
root.mainloop()
答案 0 :(得分:0)
您将变量与输入框混淆:使用更好的变量名会有所帮助。您还正在使用此名称在正在创建的文件中写入file_name
。目前尚不清楚它是否确实是您想要的。
您也将与分配给变量e
的行包装在一起-pack()
返回None
出于某种原因,您还启动了两个主循环。不要这样做,这是个坏主意。
import tkinter as tk
def save():
file_name = entry.get()
with open(file_name + '.txt', 'w') as file_object:
file_object.write(file_name) # it is unclear if writing the file_name in the newly created file is really what you want.
if __name__ == '__main__':
top = tk.Tk()
entry_field_variable = tk.StringVar()
entry = tk.Entry(top, textvariable=entry_field_variable)
entry.pack()
tk.Button(top, text="save", command=save).pack()
top.mainloop()
我删除了嵌套函数;如果您不得不这样做,也许应该改用一个类。
我还将文件的打开/关闭更改为可以为您处理的上下文管理器。
答案 1 :(得分:-1)
import tkinter as tk
def f():
def save():
a = t.get()
with open((a + '.txt'), 'w') as f:
f.write(a)
top = tk.Tk()
t = tk.StringVar(top)
tk.Entry(top, textvariable=t).pack()
tk.Button(top, text = 'Save as a file', command=save).pack()
root = tk.Tk()
tk.Button(root, text="Button", command=f).pack()
root.mainloop()
最重要的更改是t = tk.StringVar()
-> t = tk.StringVar(top)
,指定了主窗口小部件。还有一些其他更改(例如pack()
返回None
,因此请不要基于该值设置值,而应使用上下文管理器来关闭文件)
答案 2 :(得分:-2)
您没有在第二个代码中调用save()函数。在定义后添加save()
调用可以解决您的问题。
您的代码:
def f():
def save():
a = t.get()
f = open((a + '.txt'), 'w')
f.write(a)
f.close()
return
已修复:
def f():
def save():
a = t.get()
f = open((a + '.txt'), 'w')
f.write(a)
f.close()
return
save()