2019年9月24日 / 4,397次阅读 / Last Modified 2021年2月2日
tkinter
日志(log)就像一杯拿铁,随时都需要!
用Python的tkinter编写GUI程序,再使用print来打印log,已经不方便了。GUI程序正常运行时,console窗口也是要关闭的。但是确实又需要各种log的记录和显示,我们一般的解决方案是使用tk.Text控件,或者高级一点,使用scrolledtext控件。我最近编写一个GUI工具就遇到了这个需求,为了在所有的地方,都能直接方便的logging,我用Python制作了tklog这个开源小控件。
请手下留Star....^___^
tklog.py中包含4个类:tklog,winlog,tklogHandler和winlogHandler。
tklog继承自scrolledtext控件(来自Python标准库),在此基础上增加了几个实用的功能,比如上下键,鼠标右键菜单,可选择导出全部到文本到文件或copy所选内容到剪贴板,以及清空这个log区域。tklog类是所有其它类的继承,但不是继承关系,而是包含关系。
winlog是包含一个tklog对象的类,它建立在一个Modaless Toplevel窗体上,并在此基础上增加了一些不同的细节,比如在没有交点的时候窗口半透明,以及设置topmost属性。winlog是弹出式的log窗口,即可用于GUI程序,也可以在命令行程序中使用,因为winlog可两个参数可以用来withdraw(不显示root窗口)和destroy(自动销毁) root窗口。
tklogHandler继承自logging.Handler,包含一个tklog,日志都会在tklog窗口中显示。
winlogHandler继承自logging.handler,包含一个winlog,资质都会在winlog窗口中显示。
log窗口在代码层面尽最大可能保持readonly(只读),以便规避因为不小心的操作而影响的log内容的一致性。不过,您也可以通过右键菜单选择是否可编辑!
tklog还支持图片日志!
请查看并运行测试代码:
$ python3 example_tklog.py
$ python3 example_tklogHandler.py
$ python3 example_winlog.py
$ python3 example_winlogHandler.py
Ubuntu桌面下的截图:
对我来说,tklog是个很handy的工具,希望您也能喜欢。
sync参数的作用的,确保日志显示出来之后,代码再往下走!因为有的时候,log很多,在Text窗口上显示滞后。避免代码走跑完了,日志还在不停打印!
请一定不要在GUI Event Loop事件代码中将此参数设置为True,会死锁!!
sync=True可以用在后台线程中,给他们提供一个同步日志输出和代码执行位置的机制。
2020年10月16日:V0.12
2020年8月29日:V0.11
2020年7月7日:V0.10
-- EOF --
本文链接:https://www.pynote.net/archives/1207
《tklog:基于tkinter的日志控件》有3条留言
©Copyright 麦新杰 Since 2019 Python笔记
tklog是异步打印输出!如何实现同步? [ ]
没想到这个tklog项目,几乎成了我在公司另一个项目的核心! [ ]
今天同事请了一杯无糖拿铁,可惜他不是程序员... [ ]