将打印重定向到状态栏

时间:2011-12-20 12:37:04

标签: python wxpython

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

它应该看起来像这样但不起作用:

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()

由于

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

@jro是对的。 print通过标准输出两次发送"hello\n"

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

print 'hello',

有效,因为逗号告诉print保持同一行。