如何在程序结束时保持列表更改?

时间:2016-10-20 08:21:00

标签: python windows list tkinter pickle

我做了简单的提交分数选项。用户输入名称和分数,并将其保存到列表中。列表仅保存前10个分数。比,列表打印到.txt文件。但它只在程序运行时才有效。当我再次启动时,.txt文件中只有默认分数。用户分数未保存。我正在使用pickle模块。

这是我的代码。它是Python 3.4和Tkinter。 请记住,我正在学习python。

# This is inside class
#  ...
#  ...

    self.printto = tk.Button(self, text="Submit",
                             command=self.highscore
                             )
    self.printto.pack(side="left")

    self.high_scores = [
        ('Liz', 1800)
    ]

def highscore(self):
    name = self.name_ent.get()
    score = int(self.score_ent.get())

    self.high_scores.append((name, score))
    high_scores = sorted(self.high_scores, key=itemgetter(1), reverse=True)[:10]

    with open('D:\Desktop/mytext.txt', 'wb') as f:
        pickle.dump(high_scores, f)

3 个答案:

答案 0 :(得分:3)

您只是将数据保存到文件,但您没有阅读它。您必须在程序开头打开文件并从中读取分数。

with open('D:\Desktop/mytext.txt', 'rb') as f:
    high_scores = pickle.load(f)

答案 1 :(得分:-1)

很少有事情 第一件事:你的问题就在这里

with open('D:\Desktop/mytext.txt', 'wb') as f:

你打开一个文件,而不是追加模式,但是在创建中,所以每次你想要写一些东西到文件中时,你只需要覆盖现有文件。您可能希望先阅读它并与您要写的日期进行比较,以获得前10个分数。

第二件事: 使用pickle保存包含strings/ints的列表有点矫枉过正。请改用json.dumps/loads

答案 2 :(得分:-1)

你正在寻找这样的东西吗?阅读文本文件中的分数

user_score = {}
with open('D:\Desktop/mytext.txt') as f:
    for line in f:
       #add user and score to user_score here