PyQt窗口在打开后立即关闭

时间:2013-04-17 20:31:46

标签: python pyqt4

嘿伙计们。尝试打开PyQt窗口时出现问题。

以下代码是我原始代码的示例。当我在import Test中导入模块并运行test.Start()时,出现以下错误:

  

QCoreApplication :: exec:事件循环已在运行

经过一番研究,我发现这是因为我已经制作了QApplication

test.py....
import sys

def Start():
    app = QApplication(sys.argv)
    m = myWindow()
    m.show()
    app.exec_()

class myWindow():....

if __name__ == "__main__":
    Start()

然后我读到我可以像这样重写我的代码,它会修复错误:

test.py....

def Start():
    m = myWindow()
    m.show()


class myWindow():....

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    Start()
    app.exec_()

现在我不再获得 QCoreApplication :: exec:事件循环已经运行错误,但我的窗口在打开后几乎立即关闭。

2 个答案:

答案 0 :(得分:12)

你需要保持对打开的窗口的引用,否则它会超出范围并被垃圾收集,这也会破坏底层的C ++对象。尝试:

def Start():
    m = myWindow()
    m.show()
    return m


class myWindow():....

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    window = Start()
    app.exec_()

答案 1 :(得分:4)

你也可以这样做:

def Start():
    global m
    m = myWindow()
    m.show()

class myWindow():....

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    window = Start()
    app.exec_()