python - 如何连接 Qtoolbutton 和 QStackedWidget(都在同一个框架中)
问题描述
我创建了一个窗口,其中有 4 个不同的 QToolButtons,它位于 QStackedWidget 之外。当我单击第一个 QToolButton 时,如图所示,Balance Inquiry 应显示 Balance Inquiry 的内容,其余 QToolButtons 的内容类似。两者都在同一个框架中。
我不知道如何连接。我正在学习 PyQt5。我只是在使用设计器,并且对 PyQt5 中的编码有一个非常基本的想法。
GitHub 存储库链接是:https ://github.com/abhi7585/Bank-of-Braavos
解决方案
由于您不提供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_())
推荐阅读
- html - 我的下拉菜单菜单不会排在其他元素的前面
- apache - 如何从 URL 中删除文件夹名称?
- java - 如何使用 JAXB 在 Java 中将 CSV 转换为 XML
- javascript - 编写了一个函数来隐藏一个小部件,但如果没有事件监听器就无法使其工作。我需要它在页面完全加载时运行
- java - 我不明白为什么 " if(number%i ==0) " ->(condition is always true) ...这意味着这个方法总是返回 false
- python - 在 sphinx ipython 指令中运行文件
- sql-server - 如何将数据库恢复到 dockerized MS SQLServer?
- javascript - Eventbrite 嵌入式结帐 - 为什么没有显示 GA 事件和电子商务数据?
- html - 使用本地存储在页面刷新时加载增量和减量输入值
- swift - 确保在启动共享表以共享图像之前渲染图像?