在父pyqt中使用waitcondition时,子GUI不会显示

时间:2016-02-17 13:33:46

标签: python python-3.x pyqt pyqt4 qmutex

我是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一样显示。

有人可以帮我辨别我在这里犯的错误吗?

1 个答案:

答案 0 :(得分:2)

PyQt适用于主线程。只有当代码不执行任务时,主线程才会刷新GUI。

QWaitCondition和QMutex用于在线程之间进行通信,但是你只有一个线程(主线程),所以当你调用waitCondition.wait(mutex)时,你就会停止主线程,这个线程正在为了“信号”而继续。这时主线程很忙,无法刷新gui并出现你的孩子gui。