2011-12-20 37 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留在同一直線上。