10

尝试打开 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: The event loop is already running错误,但我的窗口在打开后几乎立即关闭。

4

3 回答 3

21

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

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


class myWindow():....

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    window = Start()
    app.exec_()
于 2013-04-17T20:57:35.143 回答
8

你也可以这样做:

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

class myWindow():....

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    window = Start()
    app.exec_()
于 2013-07-01T18:48:17.997 回答
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()
于 2021-09-22T18:19:27.780 回答