我的问题涉及 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)
Run Code Online (Sandbox Code Playgroud)
然而,当我运行 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)
Run Code Online (Sandbox Code Playgroud)
重绘是在事件循环中调用的,因此整个线程睡眠不会改变任何东西。
您可以通过以下方式手动调用重绘:
self.startDialogTextEdit.repaint()
Run Code Online (Sandbox Code Playgroud)
或调用静态方法:
QCoreApplication.processEvents()
Run Code Online (Sandbox Code Playgroud)
内部也调用 repaint
| 归档时间: |
|
| 查看次数: |
5243 次 |
| 最近记录: |