如何在关闭辅助窗口后修改主窗口的图形界面?

时间:2017-05-31 14:15:28

标签: python-3.x pyqt5

我的申请概念需要你的帮助。我使用Python 3.6和PyQt5。

我有一个主窗口,没有小部件,但有一个menuBar。用户需要选择“文件”和“创建项目”。 之后,使用pushButton打开辅助窗口。当我点击此按钮时,此辅助窗口将关闭。

我想找到如何在主窗口中添加许多小部件,并在关闭辅助窗口后再次控制此窗口

import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication, QDialog
from PyQt5 import QtWidgets, QtCore

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.createUI()

    def createUI(self):
        self.setWindowTitle('Application')
        menu = self.menuBar().addMenu('File')
        action = menu.addAction('Create project')
        action.triggered.connect(self.create_project_pop_up)
        self.show()
        return self

    def create_project_pop_up(self):
        self.exPopup = Ui_Dialog()
        self.exPopup.setGeometry(475, 275, 400, 300)  
        self.exPopup.show()

    class Ui_Dialog(QDialog):
    def __init__(self):
        super().__init__()
        self.pop_up()

    def pop_up(self):
        self.pushButton = QtWidgets.QPushButton(self)
        _translate = QtCore.QCoreApplication.translate
        self.pushButton.setText(_translate("Dialog", "OK"))
        self.pushButton.clicked.connect(self.create_project)

    def create_project(self):
        self.close()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())

感谢您的所有帮助

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点,我能告诉你的最简单的方法就是引入信号和插槽的概念,就像你在编写self.pushButton.clicked.connect(self.create_project)时使用默认信号一样

因此,您现在必须创建自己的信号并执行相同的逻辑。现在你有这样的事情:

import sys

from PyQt5.QtCore import pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication, QDialog, \
    QVBoxLayout, QLabel
from PyQt5 import QtWidgets, QtCore

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.createUI()

    def createUI(self):
        self.setWindowTitle('Application')
        menu = self.menuBar().addMenu('File')
        action = menu.addAction('Create project')
        action.triggered.connect(self.create_project_pop_up)
        self.show()
        return self

    def create_project_pop_up(self):
        self.exPopup = Ui_Dialog()
        self.exPopup.signal_create_project.connect(self.modify_ui)
        self.exPopup.setGeometry(475, 275, 400, 300)
        self.exPopup.show()

    @pyqtSlot()
    def modify_ui(self):
        self.central_widget = QWidget()
        self.layout = QVBoxLayout()
        self.central_widget.setLayout(self.layout)
        self.setCentralWidget(self.central_widget)

        self.lbl_project = QLabel("Now we have a new project created;")
        self.layout.addWidget(self.lbl_project)

class Ui_Dialog(QDialog):

    signal_create_project = pyqtSignal()

    def __init__(self):
        super().__init__()
        self.pop_up()

    def pop_up(self):
        self.pushButton = QtWidgets.QPushButton(self)
        _translate = QtCore.QCoreApplication.translate
        self.pushButton.setText(_translate("Dialog", "OK"))
        self.pushButton.clicked.connect(self.create_project)

    def create_project(self):
        self.close()
        self.signal_create_project.emit()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())

注意:还有很多其他方法可以做到这一点,但我会说这个是我根据你给我的东西给你的最简单的例子。仍然使用与信号一起使用的相同推理你也可以修改我设置我的新UI的部分,只需点击按钮就可以完成所有设置之前然后当你点击创建项目时你只需要显示东西以前隐藏过的。这取决于你选择你真正需要的东西,我只是给你一些想法。 “)