wxpython与logging模块结合显示实时日志,wxpythonlogging,#!/usr/bin/e
#!/usr/bin/env python#-*- coding:utf-8 -*-__author__ = "wangaibo168@163.com"import sys;reload(sys);sys.setdefaultencoding("utf-8");import wx;import random;import logging;import time;# 自定义日志Handler来接收日志数据class MyLogHandler(logging.Handler): def __init__(self,obj): logging.Handler.__init__(self); self.Object = obj; def emit(self,record): if record.levelno<self.level: return; tstr = time.strftime('%Y-%m-%d_%H:%M:%S.%U'); self.Object.AppendText("[%s][%s] %s\\n"%(tstr,record.levelname,record.getMessage()));class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,parent=None,title="日志窗体",pos=(100,100),size=(500,400)); self.buildUI(); def buildUI(self): self.box1 = wx.BoxSizer(wx.HORIZONTAL); self.text = wx.TextCtrl(parent=self,style=wx.TE_AUTO_SCROLL|wx.TE_MULTILINE); self.box1.Add(self.text,1,wx.ALL|wx.EXPAND,5,5); self.box2 = wx.BoxSizer(wx.VERTICAL); self.btn1 = wx.Button(parent=self,label="开始"); self.box2.Add(self.btn1,1,wx.ALL|wx.EXPAND,5,0); self.btn2 = wx.Button(parent=self,label="停止"); self.box2.Add(self.btn2,1,wx.ALL|wx.EXPAND,5,0); self.box1.Add(self.box2,0,wx.NORMAL,0,0); self.SetSizer(self.box1); self.text.SetEditable(False); self.btn1.Enable(); self.btn2.Disable(); self.btn1.Bind(wx.EVT_BUTTON,self.OnButton1Event); self.btn2.Bind(wx.EVT_BUTTON,self.OnButton2Event); self.timer = None; handler = MyLogHandler(self.text); logging.getLogger().addHandler(handler); # 通过wxpython的timer类实现测试日志数据 def OnTimerEvent(self,event): # 检测日志,超过指定日志大小,就清空日志列表 if len(self.text.GetValue())>1024: self.text.SetValue(''); # 随机写入1-20个测试数据 logging.error(''.join([random.choice(list(u"测试数据abcde12345")) for i in xrange(random.randint(1,20))])); def OnButton1Event(self,event): if self.timer: return; self.timer = wx.Timer(self); self.Bind(wx.EVT_TIMER,self.OnTimerEvent); self.timer.Start(1000); self.btn1.Disable(); self.btn2.Enable(); def OnButton2Event(self,event): if not self.timer: return; self.timer.Stop(); self.timer = None; self.btn1.Enable(); self.btn2.Disable();class MyApp(wx.App): def OnInit(self): self.win = MyFrame(); self.win.Show(True); self.SetTopWindow(self.win); return True;if __name__ == "__main__": app = MyApp(); app.MainLoop();#该片段来自于http://byrx.net
评论关闭