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

Saving input from entry box into .txt files

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

您没有在第二个代码中调用 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()

您将变量与输入框混淆了:使用更好的变量名会有所帮助。您还在使用此名称创建的文件中写入 file_name... 目前尚不清楚它是否真的是您想要的。 您也在为变量分配 e - pack() returns 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()

我删除了嵌套函数;如果您觉得有必要这样做,也许您应该改用 class。
我还将文件的 opening/closing 更改为为您处理它的上下文管理器。

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() returns None 所以不要基于它设置值,使用上下文管理器关闭文件)