Python 将sys.stdout重定向到wx.TextCtrl小部件
我正在尝试将sys.stdout流重定向到wx.TextCtrl小部件。我已经设法使流重定向,但显然有些消息被写了两次。希望有人能给我解释一下 我正在使用Python2.7.5和WX2.8.12.1,运行于iPython1.1.0Python 将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
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()”方法。