pyqt5从父窗口关闭子窗口

时间:2020-06-27 07:03:04

标签: python redirect pyqt5 window open-closed-principle

我使用qt设计器创建了两个窗口win1win2,并添加了两个按钮:btn_open_win2win2和{ {1}}关闭win1

当我直接运行btn_close时,win2方法可以正常工作,但是当我运行win2并从中调用win2时,close上的win1按钮却无法运行操作不正确。

我知道问题是由于在close部分中定义了win2所致,如下代码所示,但是我无法解决此问题。

win1:

win2

win2:

if __name__ =='__main__'

1 个答案:

答案 0 :(得分:0)

像这样更改win2:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow

class Ui_Win2(object):
    def setupUi(self, MainWindow):
        self.MainWindow = MainWindow
        MainWindow.setObjectName("Win2")
        MainWindow.resize(640, 480)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.btn_close = QtWidgets.QPushButton(self.centralwidget)
        self.btn_close.setGeometry(QtCore.QRect(260, 180, 131, 101))
        self.btn_close.setObjectName("btn_close")
        self.btn_close.clicked.connect(self.on_close)
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Win2"))
        self.btn_close.setText(_translate("MainWindow", "close"))

    def on_close(self):
        # win2 = QMainWindow()
        # ui = Ui_Win2()
        # ui.setupUi(win2)
        self.MainWindow.close()

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    win2 = QMainWindow()
    ui = Ui_Win2()
    ui.setupUi(win2)
    win2.show()
    sys.exit(app.exec_())

self.MainWindow 而不是 self 调用关闭功能。并在 setupUi 函数

的第一行中设置 self.MainWindow
相关问题