【问题标题】:How to connect Qtoolbutton and QStackedWidget (Both are in same frame)如何连接 Qtoolbutton 和 QStackedWidget(都在同一个框架中)
【发布时间】:2020-01-15 15:31:15
【问题描述】:

我创建了一个窗口,其中有 4 个不同的 QToolButton,它位于 QStackedWidget 之外。当我单击第一个 QToolButton 时,如图所示,Balance Inquiry 应显示 Balance Inquiry 的内容,其余 QToolButtons 的内容类似。他们都在同一个框架中。

我不知道如何连接。我正在学习 PyQt5。我只是在使用设计器,并且对 PyQt5 中的编码有一个非常基本的想法。

GitHub 存储库链接为:https://github.com/abhi7585/Bank-of-Braavos

【问题讨论】:

标签: python pyqt pyqt5 qstackedwidget qtoolbutton


【解决方案1】:

由于您没有提供MRE,所以我将从头提供解决方案。

解决方案是使用QButtonGroup添加与id关联的按钮,然后使用buttonClicked信号发送按下按钮的id信息,应该设置为QStackedWidget的currentIndex。

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)

        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
        )

        self.resize(640, 480)


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

【讨论】:

  • 感谢您提供的解决方案。我不太了解 MRE 会调查它。感谢您的努力。
猜你喜欢
  • 2018-04-15
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多