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

Python 将sys.stdout重定向到wx.TextCtrl小部件,python,wxwidgets,wx.textctrl,Python,Wxwidgets,Wx.textctrl,我正在尝试将sys.stdout流重定向到wx.TextCtrl小部件。我已经设法使流重定向,但显然有些消息被写了两次。希望有人能给我解释一下 我正在使用Python2.7.5和WX2.8.12.1,运行于iPython1.1.0 import sys import wx class Example(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, 1, title='Example', size

我正在尝试将sys.stdout流重定向到wx.TextCtrl小部件。我已经设法使流重定向,但显然有些消息被写了两次。希望有人能给我解释一下

我正在使用Python2.7.5和WX2.8.12.1,运行于iPython1.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()

这不应该发生。你确定在没有输出重定向的情况下不会写入两行吗?我也是这么想的,但是当我运行“print('This a test')”时,TextCtrl将显示“>>>This a test>>>>”尝试添加到
write
函数的开头:
如果不是len(message):return
完美,现在就排序好了。它似乎是一个单独的换行符,我使用
if message=='\n'
过滤掉了它。谢谢你的提示!请注意,wx.Frame从wx.Window继承“Destroy()”。子类“Example()”,其中子类wx.Frame覆盖继承的“Destroy()”方法。