我是PyQt编码的新手。我正在尝试从父级启动子进程(GUI)。在这里我使用waitcondition和mutex来理解它的功能。这是我的代码:
import sys
from PyQt4 import QtGui, QtCore
waitCondition = QtCore.QWaitCondition()
mutex = QtCore.QMutex()
class Child(QtGui.QWidget):
def __init__(self,ABC=None):
super(Child, self).__init__()
def startUI(self):
self.text = QtGui.QLineEdit()
self.text.returnPressed.connect(self.wakeup)
def wakeup(self):
waitCondition.wakeAll()
class Parent(QtGui.QMainWindow):
def __init__(self, parent=None):
super(Parent, self).__init__()
val = 3
abc = Child(val)
abc.startUI()
mutex.lock()
waitCondition.wait(mutex)
mutex.unlock()
print ("Mutex unlocked")
def main():
app = QtGui.QApplication(sys.argv)
aa = Parent()
aa.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
如果我执行此代码,它就不会启动子GUI,就好像我在Parent类中取消注释waitCondition.wait(mutex)并运行GUI一样显示。
有人可以帮我辨别我在这里犯的错误吗?
答案 0 :(得分:2)
PyQt适用于主线程。只有当代码不执行任务时,主线程才会刷新GUI。
QWaitCondition和QMutex用于在线程之间进行通信,但是你只有一个线程(主线程),所以当你调用waitCondition.wait(mutex)时,你就会停止主线程,这个线程正在为了“信号”而继续。这时主线程很忙,无法刷新gui并出现你的孩子gui。