0

sys.stdout ストリームを wx.TextCtrl ウィジェットにリダイレクトしようとしています。ストリームをリダイレクトすることはできましたが、どうやら一部のメッセージが 2 回書き込まれるようです。うまくいけば、誰かが私にこれを説明できます。

IPython 1.1.0から実行しているwx 2.8.12.1でpython 2.7.5を使用しています。

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