PyQt 窗口在打开后立即关闭
Posted
技术标签:
【中文标题】PyQt 窗口在打开后立即关闭【英文标题】:PyQt window closes immediately after opening 【发布时间】:2013-04-17 20:31:45 【问题描述】:我在尝试打开 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 错误,但我的窗口在打开后几乎立即关闭。
【问题讨论】:
【参考方案1】:您需要保留对打开的窗口的引用,否则它会超出范围并被垃圾收集,这也会破坏底层 C++ 对象。试试:
def Start():
m = myWindow()
m.show()
return m
class myWindow():....
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = Start()
app.exec_()
【讨论】:
【参考方案2】:你也可以这样做:
def Start():
global m
m = myWindow()
m.show()
class myWindow():....
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = Start()
app.exec_()
【讨论】:
【参考方案3】:使用以下代码。据我所知,您的问题在于您的导入并使用“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()
【讨论】:
以上是关于PyQt 窗口在打开后立即关闭的主要内容,如果未能解决你的问题,请参考以下文章