Как соединить Qtoolbutton и QStackedWidget (оба находятся в одном кадре) - PullRequest
1 голос
/ 15 января 2020

MainWindow

Я создал окно, в котором есть 4 разных кнопки QToolButton, и оно находится вне QStackedWidget. Когда я нажимаю на первый QToolButton, который является Balance Inquiry, как показано на рисунке, тогда должно отображаться содержимое Balance Inquiry, и аналогично для остальных QToolButtons. Они оба в одном кадре.

Я не знаю, как подключиться. Я изучаю PyQt5. Я просто использую конструктор и у меня есть очень базовое c представление о кодировании в PyQt5.

Ссылка на репозиторий GitHub: https://github.com/abhi7585/Bank-of-Braavos

1 Ответ

3 голосов
/ 15 января 2020

Поскольку вы не предоставляете MRE , я предоставлю решение с нуля.

Решение состоит в том, чтобы использовать QButtonGroup, где добавляются кнопки, связанные с идентификаторами, а затем использовать Сигнал buttonClicked, который отправит информацию об идентификаторе нажатой кнопки, который должен быть установлен как currentIndex QStackedWidget.

import sys

from PyQt5 import QtCore, QtWidgets


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.title_label = QtWidgets.QLabel(
            "BANK OF BRAAVOS", alignment=QtCore.Qt.AlignCenter
        )

        self.balance_inquiry_button = QtWidgets.QToolButton(text="Balance Inquiry")
        self.transaction_button = QtWidgets.QToolButton(text="Transaction")
        self.balance_sheet_button = QtWidgets.QToolButton(text="Balance Sheet")
        self.support_button = QtWidgets.QToolButton(text="Support")

        self.stacked_widget = QtWidgets.QStackedWidget()

        self.stacked_widget.addWidget(
            QtWidgets.QLabel("Balance Inquiry", alignment=QtCore.Qt.AlignCenter)
        )
        self.stacked_widget.addWidget(
            QtWidgets.QLabel("Transaction", alignment=QtCore.Qt.AlignCenter)
        )
        self.stacked_widget.addWidget(
            QtWidgets.QLabel("Balance Sheet", alignment=QtCore.Qt.AlignCenter)
        )
        self.stacked_widget.addWidget(
            QtWidgets.QLabel("Support", alignment=QtCore.Qt.AlignCenter)
        )

        central_widget = QtWidgets.QWidget()
        self.setCentralWidget(central_widget)
        lay = QtWidgets.QVBoxLayout(central_widget)
        lay.addWidget(self.title_label)

        hlay = QtWidgets.QHBoxLayout()
        hlay.addWidget(self.balance_inquiry_button)
        hlay.addWidget(self.transaction_button)
        hlay.addWidget(self.balance_sheet_button)
        hlay.addWidget(self.support_button)
        lay.addLayout(hlay)
        lay.addWidget(self.stacked_widget)

        <b>self.group_button = QtWidgets.QButtonGroup()
        for i, button in enumerate(
            (
                self.balance_inquiry_button,
                self.transaction_button,
                self.balance_sheet_button,
                self.support_button,
            )
        ):
            self.group_button.addButton(button, i)

        self.group_button.buttonClicked[int].connect(
            self.stacked_widget.setCurrentIndex
        )</b>

        self.resize(640, 480)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    ex = MainWindow()
    ex.show()
    sys.exit(app.exec_())
...