Python Qt GUI 设计:多线程中信号与槽的使用(基础篇—9)
有时候在项目开发时,经常会遇到一些耗时操作导致界面迟缓卡顿,为了解决这个问题,可以创建多线程,使用主线程更新界面使用子线程实时处理数据,最后将结果显示到界面上。
PyQt 多线程将使用 QThread 函数,QThread 是 Qt 的线程类中最核心的底层类。由于 PyQt 的的跨平台特性,QThread 要隐藏所有与平台相关的代码要使用的 QThread 开始一个线程,可以创建它的一个子类,然后覆盖其它 QThread.run()函数。
PyQt 的线程使用非常简单:建立一个自定义的类(如 thread),自我继承自 QThread ,并实现其 run()方法即可。
在使用线程时可以直接得到 Thread 实例,调用其 start()函数即可启动线程,线程启动之后,会自动调用其实现的 run()函数,该方法就是线程的执行函数业务的线程任务就写在 run()函数中,当 run()退出之后线程就基本结束了。
QThread 有 started 和 finished 信号,可以为这两个信号指定槽函数,在线程启动和结束之时执行一段代码进行资源的初始化和释放操作,更灵活的使用方法是:在自定义的 QThread 实例中自定义信号,并将信号连接到指定的槽函数,当满足一定的业务条件时发射此信号。
QThread 类中的常用方法如下表所示:
QThread 类中的常用信号如下表所示:
QThread 的简单使用如以下代码所示:
通过一个小案例来了解 QThread 多线程的使用吧。本例中,定义了一个后台线程类 BackendThread 来模拟后台耗时操作,在这个线程类中定义了信号 update_date。使用 BackendThread 线程类在后台处理数据,每秒发射一次自定义信号 update_date。
在初始化窗口界面时,定义后台线程类 BackendThread,并把线程类的信号 update_date 连接到槽函数 handleDisplay()。这样后台线程每发射一次信号,就可以把最新的时间值实时显示在前台窗口的 QLineEdit 文本对话框中。
实现代码如下所示:
运行效果如下所示:
参考资料、拓展学习:
版权声明: 本文为 InfoQ 作者【不脱发的程序猿】的原创文章。
原文链接:【http://xie.infoq.cn/article/319f95e1144ace1ad7c229117】。文章转载请联系作者。
评论