Как я могу показать разные страницы в одном окне PyQt5?

Снимок окна

Как вы можете видеть, я создаю окно с левыми кнопками, но я не знаю, как использовать QStackedWidget для отображения различных представлений после нажатия каждой кнопки. Я искал несколько похожих вопросов, но они не были полезны для меня. Я новичок в PyQt5. Я добавляю свой код ниже, пожалуйста, посмотрите.

Вот мой код:

class StackedWidget(QStackedWidget):
    def __init__(self, parent = None):
        QStackedWidget.__init__(self, parent)

    def setCurrentIndex(self, index):
        QStackedWidget.setCurrentIndex(self, index)

    def setSend(self):
        self.setCurrentIndex(0)

    def setHome(self):
        self.setCurrentIndex(1)

class Homewindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.style = """
                QPushButton{
                    background-color:rgba(0,0,0,20);
                }
                QPushButton:hover {
                    background-color: rgba(0,0,0,40);
                    color: white;
                }
            """
        self.setStyleSheet(self.style)
        self.initUI()

    def initUI(self):
        self.setGeometry(300,100,804,634)
        self.setWindowTitle('Home')

        self.stack = StackedWidget()

        page1 = QLabel("Page1")
        self.stack.addWidget(page1)

        email = QLabel("Page2")
        self.stack.addWidget(email)

        titleBarLbl = QLabel(self)
        titleBarLbl.setStyleSheet("background-color:blue")
        titleBarLbl.resize(805,53)

        self.sendBtn = QPushButton(self)
        self.sendBtn.setStyleSheet("background-color:red")
        self.sendBtn.clicked.connect(self.stack.setSend)
        self.sendBtn.setGeometry(0,53,48,48)

        self.homeBtn = QPushButton(self)
        self.homeBtn.setStyleSheet("background-color:green")
        self.homeBtn.clicked.connect(self.stack.setHome)
        self.homeBtn.setGeometry(0,101,48,48)

        self.show()

    def mousePressEvent(self,event):
        if event.button() == Qt.LeftButton:
            self.moving = True;
            self.offset = event.pos()

    def mouseMoveEvent(self,event):
        if self.moving:
            self.move(event.globalPos()-self.offset)

1 ответ

Решение

Код в вашем вопросе, кажется, работает нормально, за исключением того, что вы не дали стековому виджету родителя или не задали его геометрию. Так что просто сделайте что-то вроде этого:

def initUI(self):
    ...
    self.stack = StackedWidget(self)
    self.stack.setGeometry(55, 0, 750, 600)

Общий способ изменить страницы в виджете стека с помощью кнопок - это использовать QButtonGroup. Каждая кнопка может быть связана с индексом данной страницы в стеке-виджете. Тогда buttonClicked Сигнал группы кнопок можно использовать для смены страницы:

self.group = QtWidgets.QButtonGroup(self)
self.group.addButton(self.buttonA, 0)
self.group.addButton(self.buttonB, 1)
self.group.addButton(self.buttonC, 2)
# etc
self.group.buttonClicked[int].connect(self.stack.setCurrentIndex)

При необходимости индекс страницы в стеке-виджете можно получить так:

index = self.stack.indexOf(self.pageA)
Другие вопросы по тегам