试图做一个文本文件查看器

问题描述 投票:0回答:1

我正在尝试使用Python和wxWidgets构建一个简约的文本文件编辑器。

这是我第一次构建图形用户界面。

我想建立一个简单的窗口,该窗口一开始将打开并显示文件1.txt上的内容。

单击“下一步”按钮时,编辑器应显示2.txt文件的内容。

我制作了以下程序,该程序成功地显示了我想要的窗口和小部件,但无法打开文本文件并适当地显示它们。

有问题的行已被注释掉,我用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()

最诚挚的问候

python user-interface wxpython wxwidgets
1个回答
0
投票

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

是错误的,它calls函数,而不是将其设置为处理程序。您应该删除()

© www.soinside.com 2019 - 2024. All rights reserved.