0

我是 PyQt 编码的新手。我正在尝试从父进程启动子进程(GUI)。在这个我使用等待条件和互斥体来理解它的功能。这是我的代码:

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 会显示出来。

有人可以帮我找出我在这里犯的错误吗?

4

1 回答 1

2

PyQt 与主线程一起工作。只有当你的代码什么都不做时主线程不忙时才会刷新 GUI。

QWaitCondition 和 QMutex 用于在线程之间进行通信,但是您只有一个线程(主线程),因此当您调用 waitCondition.wait(mutex) 时,您会停止等待“信号”继续的主线程。此时主线程正忙,无法刷新gui并显示您的子gui。

于 2016-02-17T14:31:31.117 回答