wxpython 实时,重定向stdout输出到textctrl 5

我使用wxpython并且自定义了stdout重定向输出到一个textctrl(文本控件)但是只有在程序执行完之后才全部一起输出,我想要它实时输出,应该怎么办?能不能给我... 我使用wxpython 并且自定义了stdout重定向输出到一个textctrl (文本控件)
但是只有在程序执行完之后才全部一起输出,我想要它实时输出 ,应该怎么办? 能不能给我一个完整的案例。

以下是我的案例:

import sys,time
import wx

class RedirectText(object):
def __init__(self,aWxTextCtrl):
self.out=aWxTextCtrl

def write(self,string):
self.out.WriteText(string)

class MyForm(wx.Frame):

def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "wxPython Redirect Tutorial")

# Add a panel so it looks the correct on all platforms
panel = wx.Panel(self, wx.ID_ANY)
log = wx.TextCtrl(panel, wx.ID_ANY, size=(300,100),
style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL)
btn = wx.Button(panel, wx.ID_ANY, 'Push me!')
self.Bind(wx.EVT_BUTTON, self.onButton, btn)

# Add widgets to a sizer
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(log, 1, wx.ALL|wx.EXPAND, 5)
sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
panel.SetSizer(sizer)

# redirect text here
redir=RedirectText(log)
sys.stdout=redir

def onButton(self, event):
print "You pressed the button!"
time.sleep(5)
print "======End====="

# Run the program
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MyForm().Show()
app.MainLoop()
展开
 我来答
百度网友57c441c
2013-09-23 · TA获得超过307个赞
知道小有建树答主
回答量:286
采纳率:100%
帮助的人:218万
展开全部
你不是sleep了嘛。。。如果你想要点了,他后台运行,不卡主线程,你可以开线程来实现打印,不过就不能用输出重定向了,wxpython子线程刷界面需要调用wx.callafter(方法,参数1,参数2,..),不然可能崩溃。
所以,你界面写一个刷界面的方法,然后点击的时候,开一个子线程来调用刷界面方法,当然用callafter框起来
追问
恩,我有点明白了,谢谢。 你能给我一个完整的例子吗?
苏培海
2015-11-11
知道答主
回答量:9
采纳率:0%
帮助的人:1.2万
展开全部
重定向的类可参考以下程序:

class RedirectText(object):
def __init__(self,aWxTextCtrl):
self.out=aWxTextCtrl

def write(self, string):
wx.CallAfter(self.out.WriteText, string)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式