我正在寻找一种方法来等待QWidget完全显示后再调用函数。我有两个窗口:父母和孩子。在
父窗体是一个带有按钮的窗口,它调用openChild
,该按钮隐藏父窗体,显示子窗体,然后执行子窗体的主函数busyFunc
:
from PyQt5 import QtCore, QtGui, QtWidgets
from Child import Child_Form
import sys
class Parent_Form(QtWidgets.QWidget):
def __init__(self):
QtWidgets.QWidget.__init__(self)
self.setupUi(self)
self.Child = Child_Form(self)
def setupUi(self, Parent):
Parent.setObjectName("Parent")
Parent.resize(400, 300)
self.nextWindow = QtWidgets.QPushButton(Parent)
self.nextWindow.setGeometry(QtCore.QRect(150, 120, 91, 31))
self.nextWindow.setObjectName("nextWindow")
self.retranslateUi(Parent)
QtCore.QMetaObject.connectSlotsByName(Parent)
def retranslateUi(self, Parent):
_translate = QtCore.QCoreApplication.translate
Parent.setWindowTitle(_translate("Parent", "Parent Window"))
self.nextWindow.setText(_translate("Parent", "Next Window"))
self.nextWindow.clicked.connect(self.openChild)
def openChild(self):
self.hide()
self.Child.show()
self.Child.busyFunc()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
ex = Parent_Form()
ex.show()
sys.exit(app.exec_())
子窗体只有一个标签和一个文本编辑的滚动区域。在
问题是当busyFunc
被调用时(实际的函数是一个巨大的程序,为了清楚起见,我省略了它。我用一个循环来模拟这个问题)。在
父项被隐藏,但子项在busyFunc
完成之前看起来是这样的。在
如何使子加载完全像这样,然后执行busyFunc
?在
一种解决方案是在一段时间后通过计时器启动busyFunc函数。在
问题是在运行此函数时接口被阻塞,要解决这个问题,建议在线程上运行该任务
^{pr2}$显然,由于busyFunc的当前代码不与GUI交互,ie不更新GUI的任何值,因此没有问题,但是如果这个代码必须更新GUI的一些数据,它必须通过信号来完成,而不是直接:
相关问题 更多 >
编程相关推荐