我创建了一个GUI
使用文本文件作为数据库的。文本文件中的每一行都是一个条目。每行的每一项都用“|”分隔,如以下结构:“ ID|Title|Counter|Keywords|DATA|Last Update ”。其中两个项目(计数器和数据)通过 的 显示/添加/编辑text widget
/ tkinter
。
文本小部件可以multiple lines
包含breaks
,这在我的程序中应该是允许的。但是,最后我需要将每个条目放在文本文件的一行中,否则读取文件的错误会很明显。例如,我有一个比例尺,它允许我滚动浏览所有会提供out of range
错误的条目,因为文件中最后添加的行没有根据条目结构包含所有项目。
我想知道是否可以breaks
在写入文件时删除文本小部件并在再次读取文件时添加它们。我想过使用函数str.strip("\n")
and str.replace(".", ".\n")
,但这不起作用。
这是我的代码的必要部分,仅关注一个文本小部件,例如:
import tkinter as tk
data_var = tk.StringVar()
sfile = open(DATAFILE, "a+")
temp_data = datatext.get("1.0", "end-1c") #Get whole text from text widget
temp_data.strip("\n")
data_var.set(temp_data) #Save text into var
#ID|Title|Counter|Keywords|DATA|Last Update
writeline = ("\n" + str(dataID_var.get()) + "|" +
title_var.get() + "|" +
counter_var.get() + "|" +
keywords_var.get() + "|" +
data_var.get() + "|" +
lastupdate_var.get())
sfile.write(writeline) #Write data into file
sfile.close #Close file
这是读取文件并将其显示在条目中的代码:
sfile = open(DATAFILE, "r")
lines = sfile.readlines()
sfile.close
dataentry = (scalebar.get())-1 #Get the entryID from scalebar
rawcontent = lines[dataentry] #Get line from lines with request entryID
content = rawcontent.split("|") #Split the input in pieces to use the following seperatly
content = content.replace(".", ".\n")
#ID|Title|Counter|Keywords|DATA|Last Update
#Set textvariable to content and update text widget
data_var.set(content[4])
datatext["state"]="normal" #Make sure you can edit the Text widget
datatext.delete(1.0, "end") #Clear text widget first
datatext.insert(tk.END, data_var.get()) #show new content in text widget
为什么这不起作用?(我在文本文件中手动看到的第一部分str.strip("\n")
已经不起作用)我怎样才能使它起作用?我可以拒绝使用enter-key
临时解决方案吗?
提前谢谢你。