ShellRox
ShellRox

Reputation: 2602

How can i create Multi-page applications in PyQt4?

I had a little research regarding this question, but i couldn't find any simple answer or tutorial to do this.


I'm trying to find a widget, that will make transition between pages using QPushButton. I have heard of QStackWidget, But i'm not exactly sure how to use it, I have found many tutorials, but all of them were hard to understand.


So for example, i have a window class:

import sys
from PyQt4 import QtGui, QtCore

class Window(QtGui.QMainWindow):

How can i add QStackWidget to this class? (Without any layouts)

If i do so, how can i switch to specific page using QPushButton? (With adding multiple widgets in one index)

extra: is it possible to add some kind of effect on transition? like fading, etc.

Upvotes: 1

Views: 5279

Answers (1)

gyu-don
gyu-don

Reputation: 786

import sys
from PyQt4 import QtGui, QtCore

class Window(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.stacked_widget = QtGui.QStackedWidget()
        self.button = QtGui.QPushButton("Next")

        self.button.clicked.connect(self.__next_page)

        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.stacked_widget)
        layout.addWidget(self.button)

        widget = QtGui.QWidget()
        widget.setLayout(layout)
        self.setCentralWidget(widget)

        self.stacked_widget.addWidget(QtGui.QLabel("Page 1"))
        self.stacked_widget.addWidget(QtGui.QLabel("Page 2"))
        self.stacked_widget.addWidget(QtGui.QLabel("Page 3"))

    def __next_page(self):
        idx = self.stacked_widget.currentIndex()
        if idx < self.stacked_widget.count() - 1:
            self.stacked_widget.setCurrentIndex(idx + 1)
        else:
            self.stacked_widget.setCurrentIndex(0)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())

Upvotes: 6

Related Questions