2017-05-31 65 views
1

我需要您的帮助来了解我的应用程序的概念。我使用Python 3.6和PyQt5。关闭辅助窗口后如何修改主窗口的图形界面?

我有一个没有窗口小部件但带有菜单栏的主窗口。用户需要选择“文件”和“创建项目”。 之后,用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_()) 

关闭后再次这个窗口有CONTROLE感谢您所有的帮助

回答

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的部分,以便之前已经完成所有设置,然后在您单击以创建项目时只显示这些内容那是之前隐藏的。这取决于你真正需要什么,我只是给你一些想法。 “)

+0

非常感谢你,这正是我看到的! –