将输入框的输入保存到.txt文件中

时间:2018-07-02 10:46:23

标签: python tkinter file-handling

我想将输入框的输入内容保存到.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()

3 个答案:

答案 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()