wx.Log 示例

来源:互联网 发布:招商银行行情软件 编辑:程序博客网 时间:2024/04/29 16:26
  1. 用的 python 3.3,加上 phoenix。关于 phoenix,请猛戳这里。
  2. 因为没把 phoenix 放到 python 目录,而是放到当前目录了,所以 import 时候需要一点技巧。
  3. 之前用到 log 都是自己写个 class,其实工作量也不太大。用 wx.Log 的好处是支持多线程,比较适合在 GUI 里面用。
  4. verbose 的 log,默认不会显示,如果需要显示,加上这行:

wx.Log.SetVerbose(True)

示例代码:

import importlibwxpath = "wxPython_Phoenix-3.0.0.0-r75078-win64-py3.3"wx = importlib.find_loader("wx", [wxpath]).load_module()class Log(wx.LogGui):def __init__(self, tc):wx.LogGui.__init__(self)wx.Log.SetActiveTarget(self)#wx.Log.SetVerbose(True)self.tc = tc;def AppendLog(self, text, color):self.tc.SetDefaultStyle(wx.TextAttr(color))self.tc.AppendText(text+'\n')def DoLogTextAtLevel(self, level, msg):if level == wx.LOG_Error:color = wx.RED;elif level == wx.LOG_Warning:color = wx.Colour(255, 127, 0);elif level == wx.LOG_Message:color = wx.BLUE;elif level == wx.LOG_Info:color = wx.Colour(127, 127, 127);elif level == wx.LOG_Status:color = wx.Colour(0, 127, 0);else:color = wx.BLACK;self.AppendLog(msg, color);class TabLog(wx.Panel):def __init__(self, parent):wx.Panel.__init__(self, parent)sizer = wx.BoxSizer(wx.VERTICAL)self.tc = wx.TextCtrl(self, style=wx.BORDER_SUNKEN|wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_RICH2|wx.HSCROLL)self.tc.SetFont(wx.Font(10, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL))sizer.Add(self.tc, 1, wx.EXPAND)self.SetSizer(sizer)Log(self.tc)wx.LogError("Error");wx.LogWarning("Warning");wx.LogMessage("Message");wx.LogVerbose("Verbose");wx.LogStatus("Status");wx.LogSysError("SysError");class Frame(wx.Frame):def __init__(self):wx.Frame.__init__(self, None)panel = wx.Panel(self)notebook = wx.Notebook(panel, style=wx.NB_MULTILINE)tablog = TabLog(notebook)notebook.AddPage(tablog, "Log")sizer = wx.BoxSizer(wx.VERTICAL)sizer.Add(notebook, 1, wx.EXPAND)panel.SetSizer(sizer)self.Center();self.Show();if __name__ == "__main__":app = wx.App(True, "error.log")Frame()app.MainLoop()


运行结果: