将sys.stdout重定向到wx.TextCtrl小部件

时间:2016-03-14 18:02:49

标签: python wxwidgets wx.textctrl

我试图将sys.stdout流重定向到wx.TextCtrl小部件。我设法让流重定向,但显然有些消息会被写入两次。希望有人可以向我解释一下。

我使用python 2.7.5和wx 2.8.12.1,从IPython 1.1.0运行。

import sys
import wx


class Example(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, 1, title='Example', size=(500, 500))

        console = Console(self)
        sys.stdout = console

    # Restore default stdout stream
    def __del__(self):
        Destroy()

    def Destroy(self):
        sys.stdout = sys.__stdout__


class Console(wx.TextCtrl):
    def __init__(self, parent):
        self.txtctrl = wx.TextCtrl(parent, style=wx.TE_MULTILINE | wx.TE_AUTO_SCROLL | wx.TE_RICH2)

    def write(self, message):        
        self.txtctrl.AppendText('>>> ')
        self.txtctrl.AppendText(message)


def main():
    app = wx.App()

    frame = Example()
    frame.Center()
    frame.Show()

    app.MainLoop()

if __name__ == '__main__':
    main()

0 个答案:

没有答案