连接到按钮的功能打开,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首先进行标签更改和按钮禁用,并且只有在执行文件操作后才能进行?
答案 0 :(得分:1)
我可以想象两种解决方案。
首先,在设置标签文本并禁用按钮后尝试调用QCoreApplication.processEvents()。
其次,如果第一个解决方案不起作用,请将方法拆分为两个。然后,在第一种方法中,设置标签的文本,禁用按钮,并使用QTimer.singleShot()来调用第二种方法。它将被异步调用,因此Qt事件处理循环将有机会更新GUI。
答案 1 :(得分:0)
我认为使用线程是更好的方法。
但是,你可以试试
while self.button.isEnabled():
pass
在您设置之后。