使用 pySide 动态显示和隐藏选项卡小部件

Show and hide tab widgets dynamically with pySide

如果我在 QT Designer 中创建 UI(并将 UI 导入到脚本中),如何在我的脚本中隐藏和显示选项卡?

class Tool(QMainWindow, uiTool.Ui_Tool):
    def __init__(self):
        super(Tool, self).__init__()
        # SETUP UI
        self.setupUi(self)

        # self.tabWidget.removeTab() ???

无法 hide/show 选项卡小部件中的选项卡,因此您需要删除并替换它们。

下面是演示如何执行此操作的演示脚本。在这个例子中我没有试图跟踪原始索引——它只是展示了所涉及方法的基本用法:

import sys
from PyQt5 import QtCore, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(354, 268)
        self.gridLayout = QtWidgets.QGridLayout(Form)
        self.gridLayout.setObjectName("gridLayout")
        self.tabWidget = QtWidgets.QTabWidget(Form)
        self.tabWidget.setObjectName("tabWidget")
        self.tabRed = QtWidgets.QWidget()
        self.tabRed.setObjectName("tabRed")
        self.tabWidget.addTab(self.tabRed, "")
        self.tabBlue = QtWidgets.QWidget()
        self.tabBlue.setObjectName("tabBlue")
        self.tabWidget.addTab(self.tabBlue, "")
        self.tabGreen = QtWidgets.QWidget()
        self.tabGreen.setObjectName("tabGreen")
        self.tabWidget.addTab(self.tabGreen, "")
        self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 2)
        self.buttonRemove = QtWidgets.QPushButton(Form)
        self.buttonRemove.setObjectName("buttonRemove")
        self.gridLayout.addWidget(self.buttonRemove, 1, 0, 1, 1)
        self.buttonRestore = QtWidgets.QPushButton(Form)
        self.buttonRestore.setObjectName("buttonRestore")
        self.gridLayout.addWidget(self.buttonRestore, 1, 1, 1, 1)

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

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabRed), _translate("Form", "Red"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabBlue), _translate("Form", "Blue"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabGreen), _translate("Form", "Green"))
        self.buttonRemove.setText(_translate("Form", "Remove"))
        self.buttonRestore.setText(_translate("Form", "Restore"))

class Window(QtWidgets.QWidget, Ui_Form):
    def __init__(self):
        super(Window, self).__init__()
        self.setupUi(self)
        self.buttonRemove.clicked.connect(self.handleButtonRemove)
        self.buttonRestore.clicked.connect(self.handleButtonRestore)
        self.tab_pages = []
        for index in range(self.tabWidget.count()):
            self.tab_pages.append((
                self.tabWidget.widget(index),
                self.tabWidget.tabText(index),
                ))

    def handleButtonRemove(self):
        index = self.tabWidget.currentIndex()
        if index >= 0:
            self.tabWidget.removeTab(index)

    def handleButtonRestore(self):
        for page, title in self.tab_pages:
            if self.tabWidget.indexOf(page) < 0:
                self.tabWidget.addTab(page, title)

if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)
    window = Window()
    window.setGeometry(600, 100, 300, 200)
    window.show()
    sys.exit(app.exec_())