使用pyqt5中的按钮在选项卡之间切换

问题描述

我有一个包含三个按钮(R1,R2,R3)的GUI

如果我单击R1,它应该带我到R1页面,依此类推。

我为第一个按钮添加了此行,以通过使用切换功能将其与首页连接起来,但是它不起作用。

这是代码

from PyQt5 import QtCore,QtGui,QtWidgets


class Ui_Form(object):
    def setupUi(self,Form):
        Form.setObjectName("Form")
        Form.resize(447,342)
        self.tabWidget = QtWidgets.QTabWidget(Form)
        self.tabWidget.setGeometry(QtCore.QRect(0,451,341))
        self.tabWidget.setObjectName("tabWidget")
        self.tab = QtWidgets.QWidget()
        self.tab.setObjectName("tab")
        
        self.pushButton = QtWidgets.QPushButton(self.tab)
        self.pushButton.setGeometry(QtCore.QRect(30,80,75,23))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.tab_2.toggle)

        self.pushButton_2 = QtWidgets.QPushButton(self.tab)
        self.pushButton_2.setGeometry(QtCore.QRect(30,120,23))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.tab)
        self.pushButton_3.setGeometry(QtCore.QRect(30,160,23))
        self.pushButton_3.setObjectName("pushButton_3")
        self.tabWidget.addTab(self.tab,"")
        self.tab_2 = QtWidgets.QWidget()
        self.tab_2.setObjectName("tab_2")
        self.tabWidget.addTab(self.tab_2,"")
        self.tab_3 = QtWidgets.QWidget()
        self.tab_3.setObjectName("tab_3")
        self.tabWidget.addTab(self.tab_3,"")
        self.tab_4 = QtWidgets.QWidget()
        self.tab_4.setObjectName("tab_4")
        self.tabWidget.addTab(self.tab_4,"")

        self.retranslateUi(Form)
        self.tabWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self,Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form","Form"))
        self.pushButton.setText(_translate("Form","R1"))
        self.pushButton_2.setText(_translate("Form","R2"))
        self.pushButton_3.setText(_translate("Form","R3"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab),_translate("Form","Start page"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2),"R1"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3),"R2"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4),"R3"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

解决方法

QTabWidget.currentIndex : int-此属性保存当前标签页的索引位置。

如果您需要单击按钮进行导航,请使用QTabWidget.setCurrentIndex (int index)

from PyQt5 import QtCore,QtGui,QtWidgets


class Ui_Form(object):
    def setupUi(self,Form):
        Form.setObjectName("Form")
        Form.resize(447,342)
        
        self.tabWidget = QtWidgets.QTabWidget(Form)
        self.tabWidget.setGeometry(QtCore.QRect(0,451,341))
        self.tabWidget.setObjectName("tabWidget")
        self.tab = QtWidgets.QWidget()
        self.tab.setObjectName("tab")
        self.pushButton = QtWidgets.QPushButton(self.tab)
        self.pushButton.setGeometry(QtCore.QRect(30,80,75,23))
        self.pushButton.setObjectName("pushButton")

#        self.pushButton.clicked.connect(self.tab_2.toggle)

        self.pushButton_2 = QtWidgets.QPushButton(self.tab)
        self.pushButton_2.setGeometry(QtCore.QRect(30,120,23))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.tab)
        self.pushButton_3.setGeometry(QtCore.QRect(30,160,23))
        self.pushButton_3.setObjectName("pushButton_3")
        self.tabWidget.addTab(self.tab,"")
        self.tab_2 = QtWidgets.QWidget()
        self.tab_2.setObjectName("tab_2")
        self.tabWidget.addTab(self.tab_2,"")
        self.tab_3 = QtWidgets.QWidget()
        self.tab_3.setObjectName("tab_3")
        self.tabWidget.addTab(self.tab_3,"")
        self.tab_4 = QtWidgets.QWidget()
        self.tab_4.setObjectName("tab_4")
        self.tabWidget.addTab(self.tab_4,"")

        self.retranslateUi(Form)
        self.tabWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self,Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form","Form"))
        self.pushButton.setText(_translate("Form","R1"))
        self.pushButton_2.setText(_translate("Form","R2"))
        self.pushButton_3.setText(_translate("Form","R3"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab),_translate("Form","Start page"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2),"R1"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3),"R2"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4),"R3"))


class MainWindow(QtWidgets.QWidget,Ui_Form):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
     
        self.pushButton.clicked.connect(lambda: self.tabWidget.setCurrentIndex(1))   # <---

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

enter image description here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...