2017-05-31 12 views
1

私の申し込みの概念については、あなたの助けが必要です。私は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_()) 

の閉鎖後、再びこのウィンドウの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_()) 

注:今、あなたはこのような何かを持っているありそれを行うには、他の多くの方法がありますが、私はこの1つは、私はあなたが私を与えたものに基づいて、あなたを与えることができる最も単純な例であると言えるでしょう。まだ私が信号で使ったのと同じ理由で、新しいUIを設定した部分を修正してボタンをクリックしただけで、これを前もってすべて設定してから、プロジェクトを作成するだけで、以前隠されていたあなたが本当に必要なものを選ぶのはあなた次第です。私はちょうどあなたにいくつかのアイデアを伝えています。 ")

+0

本当にありがとう、それはまさに私が見たものでした! –

関連する問題