我的问题与PyQT5有关。 我试着有一个带有按钮的对话窗口,点击后按下
QTextEdit
字段这样的事情:
class StartDialog(QtWidgets.QWidget, start_dialog_ui.Ui_Dialog):
def __init__(self, parent):
super(self.__class__, self).__init__()
self.setupUi(self)
self.OKButton.clicked.connect(self.start)
def start(self):
self.startDialogTextEdit.append("simulation running ...")
run_lengthy_function(self)
然而,当我运行我的GUI时,我注意到在冗长的函数终止之后文本仅在更新,尽管在冗长的函数之前调用了QTextEdit.append
。如何强制提前更新文本?
到目前为止我尝试过(但没有工作)是让Python在触发冗长的函数调用之前等待一段时间,即
from time import sleep
class StartDialog(QtWidgets.QWidget, start_dialog_ui.Ui_Dialog):
def __init__(self, parent):
super(self.__class__, self).__init__()
self.setupUi(self)
self.OKButton.clicked.connect(self.start)
def start(self):
self.startDialogTextEdit.append("simulation running ...")
sleep(5)
run_lengthy_function(self)
答案 0 :(得分:2)
在事件循环中调用重绘,所以睡眠整个线程不会改变任何东西。
您可以通过以下方式手动调用重绘:
self.startDialogTextEdit.repaint()
或调用静态方法:
QCoreApplication.processEvents()
也在内部调用重绘
答案 1 :(得分:2)
QTextEdit
中显示文本的案例的解决方案是调用qApp.processEvents()
,此强制进行GUI更新:
def start(self):
self.startDialogTextEdit.append("simulation running ...")
QtWidgets.qApp.processEvents()
[...]
另一方面,如果任务很重,可能会阻止GUI,所以也许一个解决方案是在另一个线程上运行它,我不能给出正确的建议,因为我不知道你的功能