pyQt“flush”等价物

时间:2011-01-09 10:16:17

标签: python qt pyqt

连接到按钮的功能打开,regexp替换一些文本:

def process(self):
    # first do this!!
    self.label.setText('Processing for 5-10 sec.....')
    self.button.setEnabled(0)

    # and only then heavy files operations
    file = open(self.filename, mode='r', encoding='utf-8')
    text = re.sub(r'^ (.+)\n ', r' \[\1\]\n ', file.read(), flags=re.MULTILINE)
    newfile = open(self.filename+'temp', mode='w', encoding='utf-8')
    file_new.write(text)

    self.label.setText('Ready')

Python 3.1,PyQt 4.8.2

文件足够大,操作需要~10秒 我想,当按下按钮时,拳头替换标签中的一些文本并禁用按钮。所以用户可以看到,他应该等一段时间。

但没有任何反应。系统只挂起10秒钟,然后出现“就绪”标签并禁用按钮。

如何让Qt首先进行标签更改和按钮禁用,并且只有在执行文件操作后才能进行?

2 个答案:

答案 0 :(得分:1)

我可以想象两种解决方案。

首先,在设置标签文本并禁用按钮后尝试调用QCoreApplication.processEvents()。

其次,如果第一个解决方案不起作用,请将方法拆分为两个。然后,在第一种方法中,设置标签的文本,禁用按钮,并使用QTimer.singleShot()来调用第二种方法。它将被异步调用,因此Qt事件处理循环将有机会更新GUI。

答案 1 :(得分:0)

我认为使用线程是更好的方法。

但是,你可以试试

while self.button.isEnabled():
    pass

在您设置之后。