是否可以将文本重定向到状态栏。在这里,我想显示打印到状态栏。
它应该看起来像这样但不起作用:
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()
由于
答案 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
保持同一行。