2011-12-20 38 views
2

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

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

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

感谢

回答

3

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

一个简单的办法是检查你的write功能string内容,看它是否包含任何数据:

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

+1意外,疯狂的东西 – joaquin 2011-12-20 18:46:00

+0

感谢它现在按预期工作 – user1107826 2011-12-22 14:10:09

0

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

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

print 'hello', 

作品,因为逗号告诉print留在同一直线上。