Python - 来自文本文件的列表
Python - list from text file
我正在努力 return 来自文本文件的列表,并将新的用户输入值附加到列表而不附加现有值。
我在 tkinter 组合框中使用列表,允许用户键入要添加到列表中的新值。我当前的代码使用一个简单的文本列表,并且由于查找现有值时每行后面的“\n”而导致问题。它正在寻找值 typed/selected(在附加到列表之前没有 '\n',而列表中除了最后一行之外的所有内容后面都有 '\n')。
listFile.txt 是一个简单的文件:(它是某种配置文件)
第 1 项
第 2 项
项目 3
我现有的代码是:
from tkinter import *
from tkinter import ttk
listFile = open('listFile.txt','r')
root = Tk()
root.configure()
varItems = StringVar(root, value='')
class MainWindow(Frame):
def __init__(self,master = None):
Frame.__init__(self,master)
self.master = master
self.grid()
self.create_widgets()
def create_widgets(self):
"""Create Window Layout"""
self.label = Label(self, text="List Items").pack()
self.itemCombo = ttk.Combobox(self, width = 16, textvariable = varItems)
self.itemCombo.bind("<Return>", self.itemCombo_onEnter)
self.itemCombo.bind('<<ComboboxSelected>>',self.itemCombo_onEnter)
self.itemCombo['values'] = listFile.readlines()
self.itemCombo.pack()
def itemCombo_onEnter(self,event):
varItems.set(varItems.get().lower().strip())
mytext = varItems.get().strip()
vals = self.itemCombo.cget('values')
self.itemCombo.select_range(0,END)
print(mytext)
if not vals:
self.itemCombo.configure(values = (mytext,))
elif mytext not in vals:
with open('listFile.txt','a') as f:
f.write('\n'+ mytext)
self.itemCombo.configure(values = vals + (mytext,))
f.close
return 'break'
app = MainWindow(root)
root.mainloop()
我愿意接受任何建议或更改 - 非常感谢任何帮助!
在 onEnter 方法中将写入代码更改为:
with open('listFile.txt', 'w') as f:
self.itemCombo.configure(values=vals + (mytext,))
f.write("\n".join(vals + (mytext,)))
f.close()
并在 init 方法中将 listFile.readlines()
更改为 [l.strip() for l in listFile.readlines()]
另一个更简单的解决方案是只包含输入的串联版本以匹配文件中的搜索。
mytext = mytext + "\n"
if not vals:
self.itemCombo.configure(values = (mytext,))
elif mytext not in vals:
with open('listFile.txt','a') as f:
f.write('\n'+ mytext)
self.itemCombo.configure(values = vals + (mytext,))
f.close
我正在努力 return 来自文本文件的列表,并将新的用户输入值附加到列表而不附加现有值。
我在 tkinter 组合框中使用列表,允许用户键入要添加到列表中的新值。我当前的代码使用一个简单的文本列表,并且由于查找现有值时每行后面的“\n”而导致问题。它正在寻找值 typed/selected(在附加到列表之前没有 '\n',而列表中除了最后一行之外的所有内容后面都有 '\n')。
listFile.txt 是一个简单的文件:(它是某种配置文件) 第 1 项 第 2 项 项目 3
我现有的代码是:
from tkinter import *
from tkinter import ttk
listFile = open('listFile.txt','r')
root = Tk()
root.configure()
varItems = StringVar(root, value='')
class MainWindow(Frame):
def __init__(self,master = None):
Frame.__init__(self,master)
self.master = master
self.grid()
self.create_widgets()
def create_widgets(self):
"""Create Window Layout"""
self.label = Label(self, text="List Items").pack()
self.itemCombo = ttk.Combobox(self, width = 16, textvariable = varItems)
self.itemCombo.bind("<Return>", self.itemCombo_onEnter)
self.itemCombo.bind('<<ComboboxSelected>>',self.itemCombo_onEnter)
self.itemCombo['values'] = listFile.readlines()
self.itemCombo.pack()
def itemCombo_onEnter(self,event):
varItems.set(varItems.get().lower().strip())
mytext = varItems.get().strip()
vals = self.itemCombo.cget('values')
self.itemCombo.select_range(0,END)
print(mytext)
if not vals:
self.itemCombo.configure(values = (mytext,))
elif mytext not in vals:
with open('listFile.txt','a') as f:
f.write('\n'+ mytext)
self.itemCombo.configure(values = vals + (mytext,))
f.close
return 'break'
app = MainWindow(root)
root.mainloop()
我愿意接受任何建议或更改 - 非常感谢任何帮助!
在 onEnter 方法中将写入代码更改为:
with open('listFile.txt', 'w') as f:
self.itemCombo.configure(values=vals + (mytext,))
f.write("\n".join(vals + (mytext,)))
f.close()
并在 init 方法中将 listFile.readlines()
更改为 [l.strip() for l in listFile.readlines()]
另一个更简单的解决方案是只包含输入的串联版本以匹配文件中的搜索。
mytext = mytext + "\n"
if not vals:
self.itemCombo.configure(values = (mytext,))
elif mytext not in vals:
with open('listFile.txt','a') as f:
f.write('\n'+ mytext)
self.itemCombo.configure(values = vals + (mytext,))
f.close