0

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

我正在使用带有 wx 2.8.12.1 的 python 2.7.5,从 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()
4

0 回答 0