以下代码是我原始代码的示例。当我在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:事件循环已经运行错误,但我的窗口在打开后几乎立即关闭。
答案 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_()