PyQt4:由Qt Designer创建的切换布局

时间:2016-11-20 15:35:16

标签: python python-2.7 layout pyqt4 qt-designer

我正在使用PyQt4创建一个应用程序。我用Qt Designer创建了两个接口。当按下按钮时,我想在一个布局和另一个布局之间切换。

我的代码示例是:

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 Designer中创建的布局。

我的问题是我如何才能拥有一个主窗口并切换其中央窗口小部件,但我不确定这是否适用于单独的菜单。我已经在Qt Designer中定义了所有菜单和小部件以及状态栏等作为两个不同的项目(两个主窗口)所以我想将主程序放在其中一个主窗口中,然后在某个时刻创建一个实例第二个主窗口并切换布局和所有小部件,菜单,文本编辑等。我尝试使用setCentralWidget,但还没有为我工作。

有人可以向我解释如何做到这一点。

1 个答案:

答案 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_())