2016-11-20 5 views
1

PyQt4를 사용하여 앱을 만들고 있습니다. Qt Designer로 두 개의 인터페이스를 만들었습니다. 버튼을 누르면 한 레이아웃과 다른 레이아웃 사이를 전환하고 싶습니다.PyQt4 : Qt 디자이너가 만든 레이아웃 전환

내 코드의 샘플은 다음과 같습니다

from PyQt4 import QtGui, uic 
form_class = uic.loadUiType("sample.ui")[0] 
form_class2 = uic.loadUiType("sample2.ui")[0] 

class SecondLayout(form_class2, QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     QtGui.QMainWindow.__init__(self, parent) 
     form_class2.setupUi(self) 

class MainWindow(form_class, QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     QtGui.QMainWindow.__init__(self, parent) 
     self.setupUi(self) 
     self.btn.clicked.connect(self.open_new_window) 
    def open_new_window(self): 
     self.Window = SecondLayout() 
     # here I would like to switch the layout with a layout of self.Window 

app = QtGui.QApplication(sys.argv) 
myWindow = MainWindow(None) 
myWindow.show() 
app.exec_() 

내가 검색 약 QStackedLayout을 읽는 많은 일을했지만, Qt는 디자이너에서 만든 레이아웃과 함께 작동하도록 얻을 수 없었다.

내 질문은 어떻게 하나의 메인 윈도우를 가질 수 있고 중앙 위젯을 전환 할 수 있지만 그것은 별도의 메뉴에 대해 작동하는지 모르겠습니다. Qt Designer에서 모든 메뉴와 위젯, 상태 표시 줄 등을 두 개의 서로 다른 프로젝트 (두 개의 메인 윈도우)로 정의 했으므로 메인 윈도우 중 하나에 메인 프로그램을 가지고 싶습니다. 그리고 나서 어느 시점에서 다음과 같은 인스턴스를 만듭니다. 두 번째 주 창 및 레이아웃과 모든 위젯, 메뉴, 텍스트 편집 등을 전환합니다. setCentralWidget을 사용해 보았지만 나에게 도움이되지 못했습니다.

누군가 나에게이 작업을 수행하는 방법을 설명해 주시겠습니까?

+0

귀하의 질문은 매우 명확하지 않다 :

는 여기에 한 가지 방법을 보여주는 간단한 데모입니다. 두 개의 기본 창 사이를 전환하거나 하나의 기본 창을 가지고 중앙 창 부품을 변경 하시겠습니까? 공유 메뉴, 상태 표시 줄, 도크 위젯 등을 원하십니까? 아니면 각 창에서 메뉴를 별도로 정의합니까? – ekhumoro

+0

편집에서 질문을 더 잘 설명했습니다. –

답변

1

두 개의 완전히 다른 메인 윈도우가있는 것 같습니다. 공유 코드가 없기 때문에 모든 위젯, 메뉴, 툴바 등을 전환 할 필요가 없습니다. 하나의 창을 단순히 숨기고 다른 창을 표시 할 수도 있습니다.

from PyQt4 import QtCore, QtGui 

class Window1(QtGui.QMainWindow): 
    def __init__(self, window2=None): 
     super(Window1, self).__init__() 
     self.setGeometry(500, 100, 100, 50) 
     self.button = QtGui.QPushButton('Go To Window 2', self) 
     self.button.clicked.connect(self.handleButton) 
     self.setCentralWidget(self.button) 
     self._window2 = window2 

    def handleButton(self): 
     self.hide() 
     if self._window2 is None: 
      self._window2 = Window2(self) 
     self._window2.show() 

class Window2(QtGui.QMainWindow): 
    def __init__(self, window1=None): 
     super(Window2, self).__init__() 
     self.setGeometry(500, 100, 100, 50) 
     self.button = QtGui.QPushButton('Go To Window 1', self) 
     self.button.clicked.connect(self.handleButton) 
     self.setCentralWidget(self.button) 
     self._window1 = window1 

    def handleButton(self): 
     self.hide() 
     if self._window1 is None: 
      self._window1 = Window1(self) 
     self._window1.show() 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Window1() 
    window.show() 
    sys.exit(app.exec_())