私は、関数を呼び出す前にQWidgetが完全に表示されるまで待つ方法を探しています。私は2つのウィンドウを持っています:親と子。Pyqt5ウィジェットが表示されるまで待つ
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
、親を隠しopenChild
を呼び出すボタンを持つウィンドウである子を示し、その後、実行しますテキストの編集があるスクロール領域があります。
from PyQt5 import QtCore, QtGui, QtWidgets
class Child_Form(QtWidgets.QWidget):
def __init__(self, Parent_Form):
QtWidgets.QWidget.__init__(self)
self.setupUi(self)
self.parent = Parent_Form
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(400, 300)
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(20, 10, 61, 16))
self.label.setObjectName("label")
self.scrollArea = QtWidgets.QScrollArea(Form)
self.scrollArea.setGeometry(QtCore.QRect(20, 40, 361, 241))
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setObjectName("scrollArea")
self.scrollAreaWidgetContents = QtWidgets.QWidget()
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 359, 239))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.textEdit = QtWidgets.QTextEdit(self.scrollAreaWidgetContents)
self.textEdit.setGeometry(QtCore.QRect(0, 0, 361, 241))
self.textEdit.setObjectName("textEdit")
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Child Window"))
self.label.setText(_translate("Form", "Status:"))
def busyFunc(self):
for i in range(0, 1000000000):
pass
busyFunc
が呼び出されたときに問題がある(実際の関数は、私は明確にするためにそれを省略してきた巨大なプログラムです。私はループを使用して問題をシミュレートしています)。
親は隠されていますが、子どもはbusyFunc
が完了するまでこのように見えます。
どのように私は完全にこのように子負荷を行い、その後、busyFunc
を実行することができますか?
私の質問をより明確にする方法があれば、そう言いなさい! – Jaitnium
私の解決策を見てください – eyllanesc