Работа с GUI и текстовыми файлами-как их "синхронизировать"?

Я работаю над большим проектом программирования, и так как я новичок, это не так сложно. Я постараюсь сделать это прямо: я хочу создать GUI программу, которая читает из текстового файла с «элементами заметок», т. е. как календарь.

Интерфейс должен иметь «поле ввода текста», где вы можете отправлять новые заметки, а также должны быть две кнопки, которые при нажатии на них «прокручивается» вверх и вниз среди существующих заметок, i.d. переворачивание страницы . Одна заметка должна постоянно отображаться в текстовом поле под двумя кнопками.

Итак, чтобы завершить это, мой вопрос: как лучше всего «загрузить» заметки текстового файла в программу, чтобы я мог сделать кнопки прокрутки между ними? Должен ли я читать текстовый файл в список, который я даю своему Application(Frame)объекту?

Вот некоторые из моего кода до сих пор:

    from tkinter import *

    class Application(Frame):
        """ GUI application that creates diary. """
        def __init__(self, master):
            """ Initialize Frame. """
            Frame.__init__(self, master)
            self.grid()
            self.create_widgets()

        def create_widgets(self):
            """ Create widgets to get info of choices and display notes. """
            # create a label and text entry for new note
            Label(self,
                  text = "Enter new note:"
                  ).grid(row = 1, column = 0, sticky = W)
                  self.note_ent = Entry(self)
                  self.note_ent.grid(row = 1, column = 1, sticky = W)

            # create a submit button for the new note
            Button(self,
                   text = "Submit",
                   # command = self.add_note to a list within app obeject?
                   ).grid(row = 2 column = 0, sticky = W)

            # create a 'next note' button
            Button(self,
                   text = "Next",
                   # command = self.next_note which goes to a list?
                   ).grid(row = 6, column = 0, sticky = W)

            # create a 'past note' button
            Button(self,
                   text = "Back",
                   # command = self_past_note, or should I reuse next_note?
                   ).grid(row = 6, column = 0, sticky = W)

            # create a textbox (I am not sure?)
            self.show_ent = Text(self, width = 75, height = 10, wrap = WORD)
            self.show_ent.grid(row = 7, column = 0, columnspan = 4)

    # main
    text_file = open("diary.txt", "r")
    note_list = text_file.readlines()
    text_file.close()
    # No idea where to put the note_list, which 'client' should receive it?
    root = Tk()
    root.title("Diary")
    app = Application(root)
    root.mainloop()

Итак, теперь, когда вы изучили мой код, как заполнить недостающие части?

Edit: я добавил text_file и note_list под # main.

Примечание: я использовал календарь и дневник взаимозаменяемо, но программа больше похожа на календарь.

1 ответ

  1. Вы можете использовать его внутри Applicationкласса:

    from Tkinter import *
    
    class Application(Frame):
            """ GUI application that creates diary. """
            def __init__(self):
                """ Initialize Frame. """
                Frame.__init__(self)
    
                self.note_list = []
                with open("diary.txt", "r") as notes:
                    self.note_list = text_file.readlines()
    
                self.grid()
                self.create_widgets()
    
            def create_widgets(self):
                """ Create widgets to get info of choices and display notes. """
                # create a label and text entry for new note
                Label(self,
                      text = "Enter new note:"
                      ).grid(row = 1, column = 0, sticky = W)
                self.note_ent = Entry(self)
                self.note_ent.grid(row = 1, column = 1, sticky = W)
    
                # create a submit button for the new note
                Button(self,
                       text = "Submit",
                       # command = self.add_note to a list within app obeject?
                       ).grid(row = 2, column = 0, sticky = W)
    
                # create a 'next note' button
                Button(self,
                       text = "Next",
                       # command = self.next_note which goes to a list?
                       ).grid(row = 6, column = 0, sticky = W)
    
                # create a 'past note' button
                Button(self,
                       text = "Back",
                       # command = self_past_note, or should I reuse next_note?
                       ).grid(row = 6, column = 0, sticky = W)
    
                # create a textbox (I am not sure?)
                self.show_ent = Text(self, width = 75, height = 10, wrap = WORD)
                self.show_ent.grid(row = 7, column = 0, columnspan = 4)
    
    
    app = Application()
    app.master.title("Diary")
    app.mainloop()