首先,我们通过qt designer画好如下图的简单界面,一个push button,一个text edit,然后将test.ui文件转换为ui_test.py文件,然后在mainform.py文件中实现界面与业务逻辑分离。具体操作可参考前几篇文章,这里就不赘述了。
现在我们要实现一个简单的逻辑:点击“开始”按钮后,文本框中每隔2秒追加打印出“python小黑”。我们利用多线程来做。
第一步,新建mythread.py文件,定义继承自qtcore.qthread的类mythread,在该类中定义一个信号update_text_singal,以及函数run(),在函数run()中进行了永久循环,等待2秒并发射信号。注意,这个函数名必须为run,不能为其他的,因为这里实际上是重写了qthread类的虚函数run,在子线程启动后,会执行run函数,run函数执行完毕后,子线程即退出。代码如下图:
第二步,编辑mainform.py文件,在类mainform中,定义函数update_text,用以更新文本框的内容;在类的初始化函数中将“开始”按钮的clicked信号连接至类的dowork槽函数;在dowork函数中,实例化mythread类的变量thread,将thread的信号update_text_singal连接至槽函数update_text,然后启动thread。代码如下图选中部分:
运行效果图如下:
总结一下,本文采用了继承qthread、重写run函数的方法实现了多线程,并通过信号/槽机制实现了子线程与ui线程间的通信。通过多线程,可有效解决界面假死问题。接下来的文章中将介绍另外一种实现多线程的方法,还将涉及如何在ui线程中停止子线程。本文的run函数写的是永久循环,没有退出机制......