2014-05-17 8 views
0

2 개의 QMainWindows가 있는데, 다른 하나에서 호출하려고합니다. 창은 열리지 만 비어 있으며 부모 창을 닫을 때까지 응답하지 않습니다.비어 있음 QMainWindow, PyQt

내 코드 : 당신이 QMainWindow 객체를 생성하는 이유를 Ui_MainWindowUi_MainWindow1 클래스 QMainWindow의 서브 클래스가있을 때 이해가 안

from PyQt4 import QtCore, QtGui 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    _fromUtf8 = lambda s: s 

class Ui_MainWindow(QtGui.QMainWindow): 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self,None) 

    def setupUi(self, MainWindow): 
     MainWindow.setObjectName(_fromUtf8("MainWindow")) 
     MainWindow.resize(184, 165) 
     self.centralwidget = QtGui.QWidget(MainWindow) 
     self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 
     self.pushButton = QtGui.QPushButton(self.centralwidget) 
     self.pushButton.setGeometry(QtCore.QRect(40, 40, 75, 23)) 
     self.pushButton.setObjectName(_fromUtf8("pushButton")) 
     MainWindow.setCentralWidget(self.centralwidget) 
     self.menubar = QtGui.QMenuBar(MainWindow) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 184, 21)) 
     self.menubar.setObjectName(_fromUtf8("menubar")) 
     MainWindow.setMenuBar(self.menubar) 
     self.statusbar = QtGui.QStatusBar(MainWindow) 
     self.statusbar.setObjectName(_fromUtf8("statusbar")) 
     MainWindow.setStatusBar(self.statusbar) 

     self.retranslateUi(MainWindow) 
     QtCore.QObject.connect(self.pushButton , QtCore.SIGNAL("clicked()"),self.gone) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 

    def retranslateUi(self, MainWindow): 
     MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) 
     self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "PushButton", None, QtGui.QApplication.UnicodeUTF8)) 

    def gone(self): 
     mainwindow = QtGui.QMainWindow() 
     self.mw2 = Ui_MainWindow1() 
     self.mw2.setupUi(mainwindow) 
     self.mw2.show() 

class Ui_MainWindow1(QtGui.QMainWindow): 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self,None) 

    def setupUi(self, MainWindow): 
     MainWindow.setObjectName(_fromUtf8("MainWindow")) 
     MainWindow.resize(170, 175) 
     self.centralwidget = QtGui.QWidget(MainWindow) 
     self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 
     self.label = QtGui.QLabel(self.centralwidget) 
     self.label.setGeometry(QtCore.QRect(40, 60, 101, 16)) 
     self.label.setObjectName(_fromUtf8("label")) 
     MainWindow.setCentralWidget(self.centralwidget) 
     self.menubar = QtGui.QMenuBar(MainWindow) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 170, 21)) 
     self.menubar.setObjectName(_fromUtf8("menubar")) 
     MainWindow.setMenuBar(self.menubar) 
     self.statusbar = QtGui.QStatusBar(MainWindow) 
     self.statusbar.setObjectName(_fromUtf8("statusbar")) 
     MainWindow.setStatusBar(self.statusbar) 

     self.retranslateUi(MainWindow) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 

    def retranslateUi(self, MainWindow): 
     MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) 
     self.label.setText(QtGui.QApplication.translate("MainWindow", "This is second", None, QtGui.QApplication.UnicodeUTF8)) 

def startmain(): 
    app = QtGui.QApplication(sys.argv) 
    MainWindow = QtGui.QMainWindow() # <-- Instantiate QMainWindow object. 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    app.exec_() 

if __name__ == "__main__": 
    import sys 
    startmain() 

답변

1

. 기본적으로 두 개의 창이 필요한 경우 4 개의 기본 창이 있습니다.

MainWindow이라고하는 QMainWindow을 만들고 대신 설정하려면 MainWindow 대신 self을 사용하여 각 창을 자체 설정하십시오. 다음은 첫 번째 창에 버튼이 점에서, 나를 위해 일을 표시하고를 클릭하면 그 안에 레이블이 두 번째 열립니다 부모 뒤에

from PyQt4 import QtCore, QtGui 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    _fromUtf8 = lambda s: s 

class Ui_MainWindow(QtGui.QMainWindow): 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self,None) 

    def setupUi(self): 
     self.setObjectName(_fromUtf8("self")) 
     self.resize(184, 165) 
     self.centralwidget = QtGui.QWidget(self) 
     self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 
     self.pushButton = QtGui.QPushButton(self.centralwidget) 
     self.pushButton.setGeometry(QtCore.QRect(40, 40, 75, 23)) 
     self.pushButton.setObjectName(_fromUtf8("pushButton")) 
     self.setCentralWidget(self.centralwidget) 
     self.menubar = QtGui.QMenuBar(self) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 184, 21)) 
     self.menubar.setObjectName(_fromUtf8("menubar")) 
     self.setMenuBar(self.menubar) 
     self.statusbar = QtGui.QStatusBar(self) 
     self.statusbar.setObjectName(_fromUtf8("statusbar")) 
     self.setStatusBar(self.statusbar) 

     self.retranslateUi() 
     QtCore.QObject.connect(self.pushButton , QtCore.SIGNAL("clicked()"),self.gone) 
     QtCore.QMetaObject.connectSlotsByName(self) 

    def retranslateUi(self): 
     self.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) 
     self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "PushButton", None, QtGui.QApplication.UnicodeUTF8)) 

    def gone(self): 
     self.mw2 = Ui_MainWindow1() 
     self.mw2.setupUi() 
     self.mw2.show() 

class Ui_MainWindow1(QtGui.QMainWindow): 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self,None) 

    def setupUi(self): 
     self.setObjectName(_fromUtf8("self")) 
     self.resize(170, 175) 
     self.centralwidget = QtGui.QWidget(self) 
     self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 
     self.label = QtGui.QLabel(self.centralwidget) 
     self.label.setGeometry(QtCore.QRect(40, 60, 101, 16)) 
     self.label.setObjectName(_fromUtf8("label")) 
     self.setCentralWidget(self.centralwidget) 
     self.menubar = QtGui.QMenuBar(self) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 170, 21)) 
     self.menubar.setObjectName(_fromUtf8("menubar")) 
     self.setMenuBar(self.menubar) 
     self.statusbar = QtGui.QStatusBar(self) 
     self.statusbar.setObjectName(_fromUtf8("statusbar")) 
     self.setStatusBar(self.statusbar) 

     self.retranslateUi() 
     QtCore.QMetaObject.connectSlotsByName(self) 

    def retranslateUi(self): 
     self.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) 
     self.label.setText(QtGui.QApplication.translate("MainWindow", "This is second", None, QtGui.QApplication.UnicodeUTF8)) 

def startmain(): 
    app = QtGui.QApplication(sys.argv) 
    ui = Ui_MainWindow() 
    ui.setupUi() 
    ui.show() 
    app.exec_() 

if __name__ == "__main__": 
    import sys 
    startmain() 
+0

고맙습니다 루크, 난 그냥 자식 창에 원을 간다 부모가 닫힐 때까지는 비활성 상태입니다. – TheCreator232