首页 > 解决方案 > 如何将多行文本小部件写入文本文件的单行?

问题描述

我创建了一个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临时解决方案吗?

提前谢谢你。

标签: pythontkintertext-filesentertext-widget

解决方案


推荐阅读