Когда я пытаюсь составить список маринованных данных, я получаю только те данные, которые были сохранены в последний раз. Как отобразить все маринованные данные? - PullRequest
0 голосов
/ 29 марта 2019

Я хочу отобразить все мои маринованные значения в списке. Однако, когда я запускаю программу и нажимаю кнопку, которая переводит меня на страницу, где будут отображаться все значения, мне показывается только одно значение. Это значение с последнего запуска программы. Когда я закрываю программу и повторяю попытку, она отображает значение из моей последней попытки.

вот о чем я говорю: https://imgur.com/a/m79BkMY

Это код, где происходит травление и отображение данных.

class Streak():
    def __init__(self, action, streak_num, day, hour, minute, stored_streaks):
        self.action = action
        self.streak_num = streak_num
        self.day = day
        self.hour = hour
        self.minute = minute


    def get_time(self):
        self.action = app.frames[PageOne].action_text.get()
        self.streak_num = int(app.frames[PageOne].streak_num_text.get())
        self.day = int(app.frames[PageOne].due_day.get())
        self.hour = int(app.frames[PageOne].due_hour.get())
        self.minute = int(app.frames[PageOne].due_minute.get())

        stored_streaks = {}

        total = (self.day * 86400) + (self.hour * 3600) + (self.minute * 60)

        streak_input = {"action": self.action , "streak_num": self.streak_num,
                        "total": total}

        store_streak = stored_streaks.update(streak_input.copy())

        with open("streak.pkl", "wb") as wpickle_file:
            pickle.dump(stored_streaks, wpickle_file)

        print(streak_input)
        app.show_frame(PageTwo)


    def read_file(self):

        with open("streak.pkl", "rb") as pickle_file:
            stored_streaks = pickle.load(pickle_file)

        #stored_streaks.update(streak_input) ## comeback to this
        return stored_streaks

class PageOne(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        streak_title = tk.Label(self, text="New Streak", font=XLARGE_FONT)
        streak_title.pack()

        action_label = tk.Label(self, text="Action", font=LARGE_FONT)
        action_label.pack(anchor="w", padx=30, pady=10)

        self.action_text = tk.Entry(self, width=250)
        self.action_text.pack(anchor="w", padx=30)

        streak_num_label = tk.Label(self, text="Streak #", font=LARGE_FONT)
        streak_num_label.pack(anchor="w", padx=30, pady=10)

        self.streak_num_text = tk.Entry(self, width=250)
        self.streak_num_text.pack(anchor="w", padx=30, pady=10)

        day_label = tk.Label(self, text="Day(s)")
        day_label.pack()
        self.due_day = tk.Entry(self)
        self.due_day.pack()

        hour_label = tk.Label(self, text="Hour(s)")
        hour_label.pack()
        self.due_hour = tk.Entry(self)
        self.due_hour.pack()

        minute_label = tk.Label(self, text="Minute(s)")
        minute_label.pack()
        self.due_minute = tk.Entry(self)
        self.due_minute.pack()

        get_time_btn = tk.Button(self, bg="medium purple", text="Add",
                                command=lambda: Streak.get_time(self))
        get_time_btn.pack()

class PageTwo(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        test_label = tk.Label(self, text="TEST", font=XLARGE_FONT)
        test_label.pack()


        streak_list = Streak.read_file(self)

        action_list = streak_list.get("action", "none")

        display_list = [action_list]

        for action_list in display_list:
            list = tk.Button(self, bg="medium purple", text=action_list)
            list.pack()

        back_btn = tk.Button(self, bg="medium purple", text="BACK",
                            command=lambda: controller.show_frame(PageOne))
        back_btn.pack()

Я включил печать, чтобы убедиться, что функция get_time работает. С первого изображения это было напечатано:

{'action': 'first', 'streak_num': 1, 'total': 120}

Когда я печатаю streak_list, он печатает данные, которые были введены до закрытия программы

...