2017-10-05 5 views
1

Wenn ich meine Benutzeroberfläche in QT Designer erstelle (und die Benutzeroberfläche in das Skript importiere), wie kann ich Registerkarten in meinem Skript ein- und ausblenden?Tab-Widgets dynamisch mit pySide anzeigen und ausblenden

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

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

Wenn Sie eine Registerkarte entfernen, wird das Seitenwidget nicht gelöscht. Sie können es also mit etwas wie 'self.tabWidget.insertTab (index, self.myPage, 'Title')' zurücklegen. Sie sollten wahrscheinlich sicherstellen, dass Sie für jede Seite in Qt Designer einen sinnvollen Namen festlegen. Sie können den Index der Seite mit 'self.tabWidget.indexOf (self.myPage)' abrufen. – ekhumoro

+0

Danke, @Ekhumoro! Aber der Code 'self.tabWidget.removeTab()' funktioniert nicht. Das ist das ursprüngliche Problem. Dann muss ich herausfinden, wie man entfernte Tabs wiederherstellt. Und was ist eine Seite in diesem Kontext, ist es das gleiche wie Tab? – kiryha

+0

Sie müssen einen Index an 'removeTab' übergeben. Wenn Sie in Qt Designer ein Tab-Widget erstellen, werden automatisch einige Seiten-Widgets erstellt. Diese werden unter dem Tab-Widget im Objektinspektor angezeigt. Wenn Sie auf diese Seiten-Widgets klicken, können Sie den ** ObjektName ** festlegen. Wenn Sie beispielsweise "myPage" festlegen, können Sie 'self.indexOf (self.myPage)' verwenden, um den Index zu erhalten, und 'self.removeTab (index)', um ihn zu entfernen. – ekhumoro

Antwort

1

Es gibt keine Möglichkeit, die Registerkarten in einem Registerkarten-Widget auszublenden/auszublenden, daher müssen Sie sie entfernen und ersetzen.

Unten ist ein Demo-Skript, das zeigt, wie dies zu tun ist. Ich habe nicht versucht, die ursprünglichen Indizes in diesem Beispiel zu verfolgen - es zeigt nur die grundlegende Verwendung der beteiligten Methoden:

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