2017-06-22 33 views
0

QtDesignerを使用してすべてのウィンドウを作成しました。メインウィンドウはmdiAreaを使用して呼び出されました。私の主な問題は、mdiArea内のウィンドウを閉じると消えてしまいます。私はそれを再び開くことができません。idは終了ボタンがないようにウィンドウを開くか、ファイルが存在しない場合はファイルを開くウィンドウを作ります。最小化されPython(QtDesigner)MdiAreaウィンドウの複数の.pyファイルをボタンで開く

出力スクリーンショット

ウィンドウがValveSimulatorであり、私はそれを閉じた場合、それはもう存在していないと私はそれを

私のメインのコードを開くことができません:のcreateWindowの作りますボタンとCreateValveSimulatorがあるウィンドウは私が閉じるときにボタンから開くメインプログラムです

from PyQt5 import QtCore, QtGui, QtWidgets, uic 
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget,QWidget, QMdiSubWindow 
import ValveSim 
import MainWindow 
import Window 

class Win1(QMainWindow): 
    def __init__(self): 
     QWidget.__init__(self) 
     self.vtn = MainWindow.Ui_MainWindow() 
     self.vtn.setupUi(self) 
     self.subwindow = QMdiSubWindow() 
     self.CreateValveSimulator() 
     self.CreateWindow() 

    def CreateValveSimulator(self): 
     widget = QMainWindow() 
     self.VSim_subwindow = ValveSim.Ui_ValveSim() 
     self.VSim_subwindow.setupUi(widget) 
     self.subwindow = QMdiSubWindow(self.vtn.mdiArea) 
     widget.setParent(self.subwindow) 
     self.subwindow.setWidget(widget) 
     self.vtn.mdiArea.addSubWindow(self.subwindow) 
     widget.show() 
     self.subwindow.show() 
     self.subwindow.widget().show() 

    def CreateWindow(self): 
     widget = QMainWindow() 
     self.win_subwindow = Window.Ui_MainWindow() 
     self.win_subwindow.setupUi(widget) 
     self.subwindow = QMdiSubWindow(self.vtn.mdiArea) 
     widget.setParent(self.subwindow) 
     self.subwindow.setWidget(widget) 
     self.vtn.mdiArea.addSubWindow(self.subwindow) 
     widget.show() 
     self.subwindow.show() 
     self.subwindow.widget().show() 

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

openvsという関数にself.pushbuttonを接続しました。私のメインコードにあるように閉じたときにValve Simulatorウィンドウを開くことを望みますが、ボタンをクリックするとクラッシュします。

ボタンコード付きテーブル:

from PyQt5 import QtCore, QtGui, QtWidgets, uic 
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QWidget, QMdiSubWindow, QAction 
import Untitled 
class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName("MainWindow") 
     MainWindow.setWindowModality(QtCore.Qt.WindowModal) 
     MainWindow.resize(351, 442) 
     MainWindow.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly) 
     self.centralwidget = QtWidgets.QWidget(MainWindow) 
     self.centralwidget.setObjectName("centralwidget") 
     self.pushButton = QtWidgets.QPushButton(self.centralwidget) 
     self.pushButton.setGeometry(QtCore.QRect(85, 125, 75, 23)) 
     self.pushButton.setObjectName("pushButton") 
     self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) 
     self.pushButton_2.setGeometry(QtCore.QRect(85, 195, 75, 23)) 
     self.pushButton_2.setObjectName("pushButton_2") 
     self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget) 
     self.pushButton_3.setGeometry(QtCore.QRect(200, 125, 75, 23)) 
     self.pushButton_3.setObjectName("pushButton_3") 
     MainWindow.setCentralWidget(self.centralwidget) 
     self.pushButton.clicked.connect(self.openvs) 
     self.retranslateUi(MainWindow) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 

    def retranslateUi(self, MainWindow): 
     _translate = QtCore.QCoreApplication.translate 
     MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 
     self.pushButton.setText(_translate("MainWindow", "Open Valve Simulator")) 
     self.pushButton_2.setText(_translate("MainWindow", "Open Module Program")) 
     self.pushButton_3.setText(_translate("MainWindow", "Open Metal Sizing")) 

    def openvs(self): 
     Untitled.Win1.CreateValveSimulator() 
+0

github、ドライブなどでコードを共有できますか? – eyllanesc

+0

ValveSimとは何ですか? – eyllanesc

+0

実行される主なコードはWin1()クラスのコードです。ウィンドウが閉じているときに新しいValveSimウィンドウを開きますボタンを備えたGUI ..ですメインウィンドウはQtDesignerにmdiAreaで作られたGUIで、ValveSimとウィンドウは、メインウィンドウ(mdiArea)の内側に行こうQtDesignerから作られただけで、通常のGUIですスクリーンショットに示すように... WIN1は、メインウィンドウ内の定期的なGUIの両方を兼ね備えた –

答えて

0

ウィンドウを個別に作成し、各QMdiSubWindowに追加する必要があります。ウィジェットがサブウィンドウに表示されると、サブウィンドウが表示されます。ボタンで正常に開くには、クリックした信号を使用してshowNormal関数を呼び出す必要があります。

完全コードはhereです。

class HomeWindow(QMainWindow, Ui_HomeWindow): 
    def __init__(self, parent=None): 
     QMainWindow.__init__(self, parent=parent) 
     self.setupUi(self) 


class ValveSim(QMainWindow, Ui_ValveSim): 
    def __init__(self, parent=None): 
     QMainWindow.__init__(self, parent=parent) 
     self.setupUi(self) 


class Win1(QMainWindow, Ui_MainWindow): 
    def __init__(self, parent=None): 
     QMainWindow.__init__(self, parent=parent) 
     self.setupUi(self) 
     self.vs = ValveSim() 
     self.hw = HomeWindow() 
     self.CreateValveSimulator() 
     self.CreateWindow() 

    def CreateValveSimulator(self): 
     subwindow = QMdiSubWindow() 
     subwindow.setWidget(self.vs) 
     self.mdiArea.addSubWindow(subwindow) 
     subwindow.setFixedSize(500, 500) 
     # self.subwindow.close() 

    def CreateWindow(self): 
     self.hw.pushButton.clicked.connect(self.vs.showNormal) 
     subwindow = QMdiSubWindow() 
     subwindow.setWindowFlags(Qt.CustomizeWindowHint | Qt.Tool) 
     subwindow.setWidget(self.hw) 
     self.mdiArea.addSubWindow(subwindow) 
+0

ありがとうございます、次はQtDesignerで設定ウィンドウを作成しました。このウィンドウをポップアップするには、File-> Settings-> Working Directory(このボタンはMainWindow上にあります)をクリックします。 –

関連する問題