Я создал GUI
, который использует текстовый файл в качестве базы данных. Каждая строка в текстовом файле - это запись. Каждый элемент в каждой строке разделяется знаком «|», как в следующей структуре: « ID | Заголовок | Счетчик | Ключевые слова | ДАННЫЕ | Последнее обновление ». Два из этих элементов (счетчик и данные) отображаются / добавляются / редактируются / через text widget
из tkinter
.
Текстовый виджет может иметь multiple lines
, включая breaks
, что должно быть разрешено в моя программа. Однако, в конце концов, мне нужно, чтобы каждая запись была в одной строке текстового файла, иначе, очевидно, последуют ошибки чтения файла. Например, у меня есть масштабная линейка, которая позволяет мне прокручивать все записи, что приводит к ошибке out of range
, поскольку последняя добавленная строка в файле не содержит всех элементов в соответствии со структурой записи.
Мне интересно, можно ли удалить breaks
текстового виджета при записи в файл и добавить их при повторном чтении файла. Я думал об использовании функций str.strip("\n")
и 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
в качестве временного решения?
Заранее спасибо.