2017-10-05 388 views
1

如果我在QT Designer中創建我的UI(並將UI導入到腳本中),如何隱藏和顯示腳本中的標籤?使用pySide動態顯示和隱藏標籤小部件

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

     # self.tabWidget.removeTab() ??? 
+0

當您刪除選項卡時,頁面小部件不會被刪除。所以你可以用'self.tabWidget.insertTab(index,self.myPage,'Title')''把它放回去。您應該確保您爲Qt Designer中的每個頁面設置了明智的名稱。你可以用'self.tabWidget.indexOf(self.myPage)'得到頁面的索引。 – ekhumoro

+0

謝謝,@ekhumoro!但代碼'self.tabWidget.removeTab()'不起作用。這是最初的問題。然後,我需要弄清楚如何恢復刪除的標籤。在這種情況下什麼是頁面,它與標籤相同嗎? – kiryha

+0

您需要將索引傳遞給'removeTab'。在Qt Designer中,無論何時創建一個tab-widget,它都會自動創建一些頁面widget。這些將顯示在Object Inspector中的tab-widget下方。如果你點擊這些頁面小部件,你可以設置** objectName **。如果您將其中一個設置爲「myPage」,則可以使用'self.indexOf(self.myPage)'獲取其索引,然後執行'self.removeTab(index)'將其刪除。 – ekhumoro

回答

1

沒有辦法隱藏/顯示tab-widget中的選項卡,因此您需要刪除並替換它們。

下面是一個演示腳本,顯示如何執行此操作。我沒有試圖跟蹤這個例子中的原始索引 - 它只是顯示了涉及的方法的基本用法:

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_())