Попытка сделать просмотрщик текстовых файлов - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь создать минималистский редактор текстовых файлов, используя Python и wxWidgets.

Я впервые строю графический интерфейс пользователя.

Я хочу создать простое окно, которое при запуске откроет и отобразит содержимое файла 1.txt.

При нажатии на кнопку «Далее» редактор должен отобразить содержимое файла 2.txt.

Я создал следующую программу, которая успешно отображает нужные мне окна и виджеты, но не может открыть текстовые файлы и быстро их отобразить.

Проблемные строки c имеют был закомментирован, и я использовал print() для отображения содержимого оппонентского файла. Не только print() отображает пустую строку, но и событие нажатия кнопки, похоже, не учитывается.

Вот мой код:

#!/usr/bin/env python3

import wx
import wx.lib.editor as editor


class Editor(wx.App):
    filecounter = 1

    def __init__(self):
        wx.App.__init__(self, redirect=False)

    def OnInit(self):
        frame = wx.Frame(
            None,
            -1,
            "blabla",
            size=(200, 100),
            style=wx.DEFAULT_FRAME_STYLE,
            name="wsfacile editor",
        )
        frame.Show(True)
        frame.Bind(wx.EVT_CLOSE, self.OnCloseFrame)

        win = self.EditWindow(frame)

        if win:
            frame.SetSize((800, 600))
            win.SetFocus()
            self.window = win
            frect = frame.GetRect()
        else:
            frame.Destroy()
            return True
        self.SetTopWindow(frame)
        self.frame = frame

        return True

    def OnExitApp(self, evt):
        self.frame.Close(True)

    def OnCloseFrame(self, evt):
        evt.Skip()

    def GetNextFile(self):
        self.filecounter += 1
        # self.ed.SetText(self.GetFileText(str(self.filecounter) + ".txt"))
        print(self.GetFileText(str(self.filecounter) + ".txt"))

    def GetFileText(self, filename):
        with open(filename, "r") as myfile:
            result = myfile.readlines()
            myfile.close()
        return result

    def EditWindow(self, frame):
        win = wx.Panel(frame, -1)
        self.ed = editor.Editor(win, -1, style=wx.SUNKEN_BORDER)
        next_button = wx.Button(win, 0, "Next")
        box = wx.BoxSizer(wx.VERTICAL)
        box.Add(self.ed, 1, wx.ALL | wx.GROW, 1)
        box.Add(next_button, 0, wx.ALIGN_CENTER, 0)
        self.Bind(wx.EVT_BUTTON, self.GetNextFile())
        win.SetSizer(box)
        win.SetAutoLayout(True)
        # self.ed.SetText(self.GetFileText(str(self.filecounter) + ".txt"))
        return win


def main():
    app = Editor()
    app.MainLoop()


if __name__ == "__main__":
    main()

С уважением

1 Ответ

1 голос
/ 12 февраля 2020

Линия

        self.Bind(wx.EVT_BUTTON, self.GetNextFile())

неверна, она вызывает функцию вместо установки ее в качестве обработчика. Вы должны удалить ().

...