为啥在 PyQt5 中打开新窗口时我的应用程序会关闭?
Posted
技术标签:
【中文标题】为啥在 PyQt5 中打开新窗口时我的应用程序会关闭?【英文标题】:Why does my app close when opening a new window in PyQt5?为什么在 PyQt5 中打开新窗口时我的应用程序会关闭? 【发布时间】:2017-10-24 00:00:41 【问题描述】:~EDIT(原来的问题还在下面)~当我在新窗口中删除 self.setGeometry() 调用时,它会正常工作。这是为什么?我仍在为它构建 UI,但是一旦我这样做了,我希望我不会继续遇到这个问题......
~EDIT 2~ 刚刚意识到应该是 self.resize() 而不是 self.setGeometry()...
self.solved()
:(
我只是在学习 PyQt5,只是在搞点乱。出于某种原因,当我尝试从主应用程序窗口打开一个新窗口时,整个事情都关闭了。放入一些打印语句来跟踪进度表明它实际上也没有创建新窗口。
主窗口代码:
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, QApplication
from newLeague import *
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
newLeagueAction = QAction('Create New League', self)
newLeagueAction.setShortcut('Ctrl+N')
newLeagueAction.setStatusTip('Create a new league from scratch')
newLeagueAction.triggered.connect(self.createNewLeague)
openLeagueAction = QAction('Open Existing League', self)
openLeagueAction.setShortcut('Ctrl+E')
openLeagueAction.setStatusTip('Continue with a previously started league')
openLeagueAction.triggered.connect(self.openExistingLeague)
exitAction = QAction('Quit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Quit the application...')
exitAction.triggered.connect(self.close)
self.statusBar()
mainMenu = self.menuBar()
fileMenu = mainMenu.addMenu('&File')
fileMenu.addAction(newLeagueAction)
fileMenu.addAction(openLeagueAction)
fileMenu.addAction(exitAction)
self.resize(1920, 1080)
self.setWindowTitle("Brackets")
def createNewLeague(self):
'''shows dialog to create a new league'''
self.newLeague = CreateLeague()
self.newLeague.show()
print('New League being created...')
def openExistingLeague(self):
print('Existing League opening...')
def main():
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
这是第二个窗口:
from PyQt5.QtWidgets import QMainWindow
class CreateLeague(QMainWindow):
def __init__(self):
super(CreateLeague, self).__init__()
self.initUI()
def initUI(self):
self.setGeometry(600, 500)
self.setWindowTitle('Create A New League')
我查看了其他示例,例如 this 和 this,但我没有看到我在做什么不同。我已经尝试在构造函数中使用 parent 作为参数,结果没有什么不同。
【问题讨论】:
【参考方案1】:您的主窗口代码没有问题,但是您应该从第二个窗口中的 super
参数中删除 CreateLeague, self
参数,然后,您的代码应该可以正常工作。
见下文:
from PyQt5.QtWidgets import QMainWindow
class CreateLeague(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.resize(600, 500)
self.setWindowTitle('Create A New League')
【讨论】:
以上是关于为啥在 PyQt5 中打开新窗口时我的应用程序会关闭?的主要内容,如果未能解决你的问题,请参考以下文章
PyQt5 - 在新窗口中打开 QMediaplayer 并播放视频
为啥在 Edge 中调试我的 asp.net core 2.0 应用程序时显示“您需要一个新应用程序才能打开此本地主机”弹出窗口?