如何在Python GUI 中随时记录log并显示在UI上呢?

生活中的每个细节,有些人习惯使用图像的方式做纪录;有些人更喜欢使用文字去做纪录。 那在资讯领域中呢? 有一群人就喜欢啃Raw data 所纪录出的log ....

Python 中有一个好用的module,logging,其可以将log 等级做分类,细则就随便google找找都有。 这次的重点则是,要怎麽把程序中随时印在console 中的print 资讯,导入到UI 元件中。

笔者打算用signal的形式直接去实作,如果对於使用callback有兴趣的朋友就另外去找其他文章来看罗.

使用工具

  • PySide2-Designer
  • PySide2

作法:

  1. 先做一个Handler来传递参数到UI端使用
class LoggingHandler(QObject):
    finished = Signal()
    updated = Signal(str)

    @QtCore.Slot()
    def __init__(self):
        super(LoggingHandler, self).__init__()
        self.working = True

    def work(self):
        global v_logging
        if self.working:
            self.updated.emit(v_logging)
        self.finished.emit()
  1. 在ui_mainwindow class中设定thread3的预设值为空及要启用的功能
    self.thread3 = None
  1. 撰写runloggingtasks 功能
def runloggingTasks(self):
        global v_logging
        self.Logging = LoggingHandler()
        self.thread3 = QThread()
        self.thread3.started.connect(self.Logging.work)
        self.Logging.updated.connect(self.updateText)
        self.Logging.finished.connect(self.thread3.quit)
        self.Logging.finished.connect(self.Logging.deleteLater)
        self.Logging.moveToThread(self.thread3)
        self.thread3.start()
        v_logging = "log start"

[笔记]
(1) 笔者是使用v_logging 共用变数当成queue使用
(2) v_logging 可被用在任何放置print 的地方,笔者在这边是测试功能,所以直接放置在功能内

笔者存放log的UI元件是使用lineEdit

  1. 回到ui_mainwindow class中, 启用runloggingtasks功能
    self.runloggingTasks()

效果:
执行後可以看到红色框框处多了log start 字样

结论:
网路上有使用logging module + handleer的形式做出来,但笔者在看了程序码後发现对方写得太复杂了,笔者只想简单实作就好。所以选择使用signal + slot + queue的形式来实作。

後记:
做一个新专案来学一种新的应用真的是很棒的形式,PySide 系列笔者还是会继续在铁人赛後继续钻研下去,因为真的很有趣。网路上找到的参考资料并不一定适合每一个人,唯有取经跟自干整合後才会变成自己的产物。

PS: 可惜自干纯手刻资料清洗工具的side project还没做完,因为这专案还在继续开发中,未来相关的分享会出现在其他地方吧。暂定是笔者即将开始撰写的medium。


<<:  简报版-第十一章-从网址看问题,短网址的风险?真实网域的辨别?

>>:  【後转前要多久】# Day30 Angular - Pipe 管道元件

[Day 12] 阿嬷都看得懂的 CSS 收整与 DRY 策略

阿嬷都看得懂的 CSS 收整与 DRY 策略 玫瑰即使换个名字,还是同样芬芳。 -莎士比亚 欢迎各位...

Python 正规表达式--re 套件 使用笔记

findall : 为寻找字串中所有可能符合格式的内容,回传list格式 compile格式 加了?...

K8s - Kubernetes Django 部署笔记

K8s - Kubernetes Django 部署笔记 参考资料 Windows 7 安装Dock...

Day 23 CSS3 < 目标选择器>

CSS3新增的目标选择器类型: 1.属性选择器 属性选择器可以根据元素特定属性来选择元素,这样就可以...

【Day27】反馈元件 - Progress circle

元件介绍 Progress circle 跟上一篇 Progress bar 一样是能够展示当前进度...