2017-09-19 115 views
0

我很努力地从文本文件中返回一个列表,并将新的用户输入值附加到列表中,而不追加现有的值。Python - 来自文本文件的列表

我在tkinter组合框中使用了列表,允许用户键入新值添加到列表中。我当前的代码使用简单的文本列表,并且在查找现有值时每行之后的'\ n'导致问题。它正在寻找键入/选择的值(直到附加到列表中才有'\ n',而列表中除最后一行之外的所有列都在其后面有'\ n')。

listFile.txt是一个简单的文件:(它是各种各样的congfiguration文件) 项目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() 

我打开任何建议或更改 - 任何帮助非常感谢!

回答

1

里面的OnEnter梅索德写代码更改为:

with open('listFile.txt', 'w') as f: 
    self.itemCombo.configure(values=vals + (mytext,)) 
    f.write("\n".join(vals + (mytext,))) 
    f.close() 

初始化梅索德改变内部listFile.readlines()[l.strip() for l in listFile.readlines()]

1

另一种更简单的解决办法是太只是包括你输入的连锁版本以匹配您的文件中的搜索。

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