Python 将条目输入写入文本文件

Python 将条目输入写入文本文件,python,tkinter,text-files,tkinter-entry,Python,Tkinter,Text Files,Tkinter Entry,所以基本上它不会将我输入的内容写入文本文件,我哪里出错了。。。。。。 我不得不尝试使用一个按钮,这样它就可以在输入后写入 我是否应该在函数中而不是在for循环中写入条目这里需要首先解决一些问题 您在全局命名空间中而不是函数中有get()和extend()。这将导致在\uuuu init\uuuu处调用这两个方法,基本上,您将始终具有和空sting。您希望使用函数调用这些东西,以便在需要时获得数据 button命令还在\uuuu init\uuuu处调用函数,因为实际上没有保存对函数的引用。要解决

所以基本上它不会将我输入的内容写入文本文件,我哪里出错了。。。。。。 我不得不尝试使用一个按钮,这样它就可以在输入后写入
我是否应该在函数中而不是在for循环中写入条目

这里需要首先解决一些问题

  • 您在全局命名空间中而不是函数中有
    get()
    extend()
    。这将导致在
    \uuuu init\uuuu
    处调用这两个方法,基本上,您将始终具有和空sting。您希望使用函数调用这些东西,以便在需要时获得数据

  • button命令还在
    \uuuu init\uuuu
    处调用函数,因为实际上没有保存对函数的引用。要解决这个问题,您需要去掉括号或使用
    lambda

  • 我将使用
    导入tkinter作为tk
    从tkinter导入*中导入
    。这将防止意外重写方法

  • 我会将
    与open一起使用,而不是
    open()
    close()
    。函数完成后,
    with
    语句将自动关闭文件

  • 下面,我对您的代码进行了一些清理,并添加了所需的更改。如果你有任何问题,请告诉我

    例如:

    from tkinter import *
    
    root = Tk()
    writeList = []
    myFile = open("details.txt","w")
    
    nameLabel = Label(root,text = "Input your name: ")
    nameLabel.grid(column = 1,row = 0)
    
    nameEntry = Entry(root)
    nameEntry.grid(column = 2,row = 0)
    
    name = nameEntry.get()
    writeList.extend(("Name:",name))
    
    ageLabel = Label(root,text = "Enter your age:")
    ageLabel.grid(column = 1,row = 1)
    
    ageEntry = Entry(root)
    ageEntry.grid(column = 2,row = 1)
    
    age = ageEntry.get()
    writeList.extend(("Age:",age))
    
    def writeFile(writeList):
        for x in range(len(writeList)):
            write = writeList[x]
            myFile.write(write)
            myFile.write("\n")
    
        myFile.close()
    
    writeButton = Button(root,text = "Write to a file",command = writeFile(writeList),bg = "turquoise")
    writeButton.grid(column = 1,row = 3)
    
    root.mainloop()
    
    结果:

    文件包含以下文本:

    import tkinter as tk
    
    root = tk.Tk()
    write_list = []
    
    tk.Label(root, text="Input your name: ").grid(column=1, row=0)
    tk.Label(root, text="Enter your age:").grid(column=1, row=1)
    name_entry = tk.Entry(root)
    age_entry = tk.Entry(root)
    name_entry.grid(column=2, row=0)
    age_entry.grid(column=2, row=1)
    
    
    def write_file():
        name = name_entry.get()
        age = age_entry.get()
        write_list.extend(("Name:", name))
        write_list.extend(("Age:", age))
        with open("details.txt", "w") as my_file:
            for x in range(len(write_list)):
                write = write_list[x]
                my_file.write(write)
                my_file.write("\n")
    
    
    tk.Button(root, text="Write to a file", command=write_file, bg="turquoise").grid(column=1, row=3)
    root.mainloop()
    

    这里有几件事需要先解决

  • 您在全局命名空间中而不是函数中有
    get()
    extend()
    。这将导致在
    \uuuu init\uuuu
    处调用这两个方法,基本上,您将始终具有和空sting。您希望使用函数调用这些东西,以便在需要时获得数据

  • button命令还在
    \uuuu init\uuuu
    处调用函数,因为实际上没有保存对函数的引用。要解决这个问题,您需要去掉括号或使用
    lambda

  • 我将使用
    导入tkinter作为tk
    从tkinter导入*
    中导入
    。这将防止意外重写方法

  • 我会将
    与open一起使用,而不是
    open()
    close()
    。函数完成后,
    with
    语句将自动关闭文件

  • 下面,我对您的代码进行了一些清理,并添加了所需的更改。如果你有任何问题,请告诉我

    例如:

    from tkinter import *
    
    root = Tk()
    writeList = []
    myFile = open("details.txt","w")
    
    nameLabel = Label(root,text = "Input your name: ")
    nameLabel.grid(column = 1,row = 0)
    
    nameEntry = Entry(root)
    nameEntry.grid(column = 2,row = 0)
    
    name = nameEntry.get()
    writeList.extend(("Name:",name))
    
    ageLabel = Label(root,text = "Enter your age:")
    ageLabel.grid(column = 1,row = 1)
    
    ageEntry = Entry(root)
    ageEntry.grid(column = 2,row = 1)
    
    age = ageEntry.get()
    writeList.extend(("Age:",age))
    
    def writeFile(writeList):
        for x in range(len(writeList)):
            write = writeList[x]
            myFile.write(write)
            myFile.write("\n")
    
        myFile.close()
    
    writeButton = Button(root,text = "Write to a file",command = writeFile(writeList),bg = "turquoise")
    writeButton.grid(column = 1,row = 3)
    
    root.mainloop()
    
    结果:

    文件包含以下文本:

    import tkinter as tk
    
    root = tk.Tk()
    write_list = []
    
    tk.Label(root, text="Input your name: ").grid(column=1, row=0)
    tk.Label(root, text="Enter your age:").grid(column=1, row=1)
    name_entry = tk.Entry(root)
    age_entry = tk.Entry(root)
    name_entry.grid(column=2, row=0)
    age_entry.grid(column=2, row=1)
    
    
    def write_file():
        name = name_entry.get()
        age = age_entry.get()
        write_list.extend(("Name:", name))
        write_list.extend(("Age:", age))
        with open("details.txt", "w") as my_file:
            for x in range(len(write_list)):
                write = write_list[x]
                my_file.write(write)
                my_file.write("\n")
    
    
    tk.Button(root, text="Write to a file", command=write_file, bg="turquoise").grid(column=1, row=3)
    root.mainloop()
    

    您的问题是这一行
    name=nameEntry.get()
    writeList.extend((“name:”,name))
    .get()
    方法仅在init时获取字段一次。您需要将这些行移到您的函数中。无论何时编写函数,age=ageEntry.get()
    都会遇到同样的问题。此外,您的按钮命令
    command=writeFile(writeList)
    也是一个问题。这里需要lambda,否则根本不传递参数。类似这样的内容:
    command=lambda:writeFile(writeList)
    您的问题是这一行
    name=nameEntry.get()
    writeList.extend((“name:,name))
    .get()
    方法仅在init时获取字段一次。您需要将这些行移到您的函数中。无论何时编写函数,age=ageEntry.get()
    都会遇到同样的问题。此外,您的按钮命令
    command=writeFile(writeList)
    也是一个问题。这里需要lambda,否则根本不传递参数。类似这样的东西:
    command=lambda:writeFile(writeList)
    OP怎么可能不接受这个答案?@bruno it occurrence lol.看起来他们现在接受了。新用户有时会错过复选标记:我与OP进行了交流,告诉他不接受好答案是不正常的,所以OP最终选择了;-)OP怎么可能不接受这个答案呢?@bruno它发生了lol。看起来他们现在接受了。新用户有时会错过复选标记:我与OP进行了交流,告诉他不接受好答案是不正常的,所以OP最终选择了;-)