司开星的博客

PyQt4 解决主界面阻塞导致状态栏无法刷新的问题

近期写的程序中有个访问网页的操作,比较耗时,于是准备给它加上个状态栏用于提醒当前后台进行到哪一步了。

多线程方式

之前写的程序也有这个需求,当时用多线程解决的。写法如下:

1
2
3
4
5
6
7
8
9
10
11
12
class SetLabelText(QThread):
def __init__(self, label, message, parent=None):
super(SetLabelText, self).__init__(parent)
self.lable = label
self.message = message

def __del__(self):
self.exiting = True
self.wait()

def run(self):
self.lable.setText(u"%s" % self.message)

另外在主程序中比较耗时的部分添加了调用语句:

1
2
self.m1 = SetLabel(self.status_label, u"提醒")
self.m1.start()

更简单的方式

多线程虽然看起来是解决问题了,但在面对一个方法中多次修改状态栏内容时还需要更多处理步骤才能完美解决所有问题,这样显得有些大材小用了。在查找资料的过程中发现了更简单的解决问题的方法,就是在主程序中直接写上提醒语句,另外还要加上一行:

1
2
self.status_label.setText(u"正在读取配置……请稍候……")
QCoreApplication.processEvents()

参考资料:

正确使用Qt多线程