重定向打印到状态栏



是否可以将文本重定向到状态栏?这里我想显示打印到状态栏

它应该是这样的,但是它不起作用:

import sys
import wx
class RedirectText:
    def __init__(self, statusbar):
        self.statusbar = statusbar
    def write(self,string):
        self.statusbar.SetStatusText(string)
class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None)
        self.log = wx.TextCtrl(self, -1, '', style=wx.TE_READONLY|wx.TE_MULTILINE)
        sizer = wx.BoxSizer()
        sizer.Add(self.log, 1, wx.ALL | wx.EXPAND, 5)
        self.SetSizer(sizer)
        self.statusbar = self.CreateStatusBar()
        redirection = RedirectText(self.statusbar)
        sys.stdout = redirection
        print 'hello'
        self.Bind(wx.EVT_CLOSE, self.OnClose)
    def OnClose(self, event):
        raise RuntimeError('error')
if __name__ == "__main__":
    app = wx.PySimpleApp()
    frame = MainFrame()
    frame.Show()
    app.MainLoop()

谢谢

这可能有点出乎意料,但是您定义的write函数将在当前代码中被调用两次:首先它将接收"hello"字符串,然后是换行符。因为换行符在状态栏中不可见,所以看起来没有任何更新。

一个简单的修复方法是检查write函数中string的内容,看看它是否包含任何数据:

def write(self, string):
    string = string.strip()
    if len(string) > 0:
        self.statusbar.SetStatusText(string)

@jro是对的。print通过stdout分两次发送"hellon"

然后,另一个更容易的修复(尽管可能不太方便)是用逗号结束print:

print 'hello',

工作,因为逗号告诉print保持在同一行。

最新更新