将条目输入写入文本文件
Writing an Entry Input to a text file
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()
所以基本上它不会把我在条目中输入的内容写到我哪里出错的文本文件中......
我不得不尝试使用一个按钮,这样它就会在输入后写入
我应该在函数中而不是在 for 循环中写条目吗
这里有一些问题需要先解决。
您在全局命名空间中有 get()
和 extend()
而不是在函数中。这将导致在 __init__
处调用 2 种方法,基本上你将始终拥有空刺。您想使用一个函数来调用这些东西,以便在需要时获取数据。
您的按钮命令也在 __init__
处调用您的函数,因为您实际上并未保存对该函数的引用。要解决此问题,您需要去掉括号或使用 lambda
.
我会用 import tkinter as tk
而不是 from tkinter import *
。这将防止任何意外覆盖方法。
我会使用 with open
而不是 open()
和 close()
。 with
语句将在函数完成后自动关闭文件。
下面我稍微清理了您的代码并添加了所需的更改。如果您有任何问题,请告诉我。
示例:
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:
Mike - SMT
Age:
32
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()
所以基本上它不会把我在条目中输入的内容写到我哪里出错的文本文件中...... 我不得不尝试使用一个按钮,这样它就会在输入后写入 我应该在函数中而不是在 for 循环中写条目吗
这里有一些问题需要先解决。
您在全局命名空间中有
get()
和extend()
而不是在函数中。这将导致在__init__
处调用 2 种方法,基本上你将始终拥有空刺。您想使用一个函数来调用这些东西,以便在需要时获取数据。您的按钮命令也在
__init__
处调用您的函数,因为您实际上并未保存对该函数的引用。要解决此问题,您需要去掉括号或使用lambda
.我会用
import tkinter as tk
而不是from tkinter import *
。这将防止任何意外覆盖方法。我会使用
with open
而不是open()
和close()
。with
语句将在函数完成后自动关闭文件。
下面我稍微清理了您的代码并添加了所需的更改。如果您有任何问题,请告诉我。
示例:
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:
Mike - SMT
Age:
32