gpt4 book ai didi

python - PyQt关闭子窗口问题,无限循环?

转载 作者:太空宇宙 更新时间:2023-11-03 21:04:20 24 4
gpt4 key购买 nike

在编写一些代码时,我偶然发现了一个无法解决的问题。我已经删除了代码以仅显示问题。我尝试过使用 MainWindow.close() 但它会关闭第一个窗口。控制台错误是:

self.close()
[Previous line repeated 993 more times]
RecursionError: maximum recursion depth exceeded
import sys
from PyQt5 import QtWidgets, QtGui, QtCore

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.pushButton.setText("Open new window")
self.pushButton.clicked.connect(self.open)

def open(self):
self.window = QtWidgets.QMainWindow()
self.ui = Ui_SecondWindow()
self.ui.setupUi(self.window)
self.window.show()

class Ui_SecondWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.pushButton.setText("Close new window")
self.pushButton.clicked.connect(self.close)

def close(self):
self.close()

if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

最佳答案

下一部分中指向此的错误:

def close(self):
self.close()

自从调用 self.close() 以来,您正在调用调用返回的 self.close() 的类的 close() 方法,正如您所见,它生成了一个无限循环。

另一个错误是PyQt不建议修改pyuic生成的代码,建议创建另一个继承于适当窗口的类并使用pyuic生成的类作为接口(interface)。

考虑到上一部分所示的内容,解决方案是:

import sys
from PyQt5 import QtWidgets, QtGui, QtCore

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.pushButton.setText("Open new window")

class Ui_SecondWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.pushButton.setText("Close new window")

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.pushButton.clicked.connect(self.open)

@QtCore.pyqtSlot()
def open(self):
self.window = SecondWindow()
self.window.show()

class SecondWindow(QtWidgets.QMainWindow, Ui_SecondWindow):
def __init__(self, parent=None):
super(SecondWindow, self).__init__(parent)
self.setupUi(self)
self.pushButton.clicked.connect(self.close)

if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())

关于python - PyQt关闭子窗口问题,无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55525112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com