Python 3.x 关闭辅助窗口后,如何修改主窗口的图形界面?

Python 3.x 关闭辅助窗口后,如何修改主窗口的图形界面?,python-3.x,pyqt5,Python 3.x,Pyqt5,我需要你的帮助来构思我的申请。我使用Python 3.6和PyQt5 我有一个主窗口,没有小部件,但有一个菜单栏。用户需要选择“文件”和“创建项目”。 之后,用按钮打开一个辅助窗口。当我点击此按钮时,此辅助窗口关闭 我想了解如何在主窗口中添加许多小部件,并在关闭辅助窗口后再次控制此窗口 import sys from PyQt5.QtWidgets import QWidget, QPushButton, QApplication, QDialog from PyQt5 import QtWid

我需要你的帮助来构思我的申请。我使用Python 3.6和PyQt5

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

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

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_())

感谢您的帮助

有很多方法可以做到这一点,我可以向您展示的最简单的方法是引入信号和插槽的概念,就像您在编写
self.button.clicked.connect(self.create\u项目)

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

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_())

注意:还有很多其他方法可以做到这一点,但我想说,根据你给我的,这是我能给你的最简单的例子。仍然使用我与signal使用的相同推理,您还可以修改我在按钮中单击时设置新UI的部分,使其在之前已经设置好,然后当您单击创建项目时,您只显示之前隐藏的内容。这取决于你选择你真正需要的,我只是给你一些想法。“

有很多方法可以做到这一点,我可以向您展示的最简单的方法是引入信号和插槽的概念,就像您在编写
self.butdown.clicked.connect(self.create\u项目)时使用默认信号一样。

所以你现在必须创建你自己的信号,并做同样的逻辑。现在你有了这样的东西:

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_())
注意:还有很多其他方法可以做到这一点,但我想说,这是根据您给我的内容,我可以给您提供的最简单的示例。仍然使用我与signal相同的推理,您还可以修改我在单击按钮时设置新UI的部分,使其在之前就已经设置好了,然后当你点击创建项目时,你只需显示以前隐藏的东西。这取决于你选择你真正需要的东西,我只是给你一些想法。”)