代码之家  ›  专栏  ›  技术社区  ›  kiryha

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

  •  1
  • kiryha  · 技术社区  · 8 年前

    如果我在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() ???
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   ekhumoro    8 年前

    无法在选项卡小部件中隐藏/显示选项卡,因此您需要删除并替换它们。

    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_())
    
    推荐文章