PyQt窗口打开后立即关闭

12

当我尝试打开一个 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:事件循环已经运行错误,但是我的窗口几乎立即在打开后关闭。

3个回答

27

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

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


class myWindow():....

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

11

您也可以进行以下操作:

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

class myWindow():....

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

1

使用以下代码。我觉得您的问题在于导入和将“show”用作函数名称。您没有提供您在类中编写的内容,因此很难猜测。但是以下代码非常好用。;-)

最好的祝愿,祝好运!

import sys
from PyQt5 import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

app = QApplication(sys.argv)
def Start():
    m = myWindow()
    m.showWid()
    sys.exit(app.exec())

class myWindow:
  def __init__(self):
    self.window = QWidget()
    self.window.setWindowTitle("Program Title")
    self.window.setFixedWidth(600)
    self.window.setStyleSheet("background: #18BEBE;")

  def showWid(self):
    self.window.show()

if __name__ == "__main__":
    Start()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接