2011-12-20 13 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"文字列、改行文字を受け取ります。改行はステータスバーに表示されないため、更新されていないようです。

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

+1予期せぬ、クレイジーなもの – joaquin

+0

これは期待どおりに動作しています – user1107826

0

@jroは右である:

簡単に修正があなたのwrite機能にstringの内容を確認し、それがどのようなデータが含まれているかどうかを確認することです。 printは、stdoutを通して2ショットで"hello\n"を送信しています。

その後、別のはまだ簡単に修正(多分あまり便利にもかかわらず)は、コンマであなたのprint秒を終了することです:カンマが同じラインに滞在するprintを伝え

print 'hello', 

作品です。

関連する問題