我已经在 QtabWidget 中创建了选项卡。我的主要目的是隐藏选项卡并在按下按钮时显示它。我不想每次都删除和添加选项卡。我想隐藏它并在需要时显示它。
我尝试过这样做:
self.tab.hide()
但这行不通。 以下是当前 GUI 的代码:
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(680, 425)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.verticalLayout_3 = QtGui.QVBoxLayout(self.centralwidget)
self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3"))
self.tabWidget = QtGui.QTabWidget(self.centralwidget)
self.tabWidget.setObjectName(_fromUtf8("tabWidget"))
self.tab = QtGui.QWidget()
self.tab.setObjectName(_fromUtf8("tab"))
self.verticalLayout_4 = QtGui.QVBoxLayout(self.tab)
self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4"))
self.pushButton_3 = QtGui.QPushButton(self.tab)
self.pushButton_3.setObjectName(_fromUtf8("pushButton_3"))
self.verticalLayout_4.addWidget(self.pushButton_3)
self.tabWidget.addTab(self.tab, _fromUtf8(""))
self.tab_2 = QtGui.QWidget()
self.tab_2.setObjectName(_fromUtf8("tab_2"))
self.verticalLayout_5 = QtGui.QVBoxLayout(self.tab_2)
self.verticalLayout_5.setObjectName(_fromUtf8("verticalLayout_5"))
self.treeWidget = QtGui.QTreeWidget(self.tab_2)
self.treeWidget.setObjectName(_fromUtf8("treeWidget"))
self.verticalLayout_5.addWidget(self.treeWidget)
self.tabWidget.addTab(self.tab_2, _fromUtf8(""))
self.verticalLayout_3.addWidget(self.tabWidget)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 680, 21))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.dockWidget = QtGui.QDockWidget(MainWindow)
self.dockWidget.setObjectName(_fromUtf8("dockWidget"))
self.dockWidgetContents = QtGui.QWidget()
self.dockWidgetContents.setObjectName(_fromUtf8("dockWidgetContents"))
self.verticalLayout = QtGui.QVBoxLayout(self.dockWidgetContents)
self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
self.pushButton = QtGui.QPushButton(self.dockWidgetContents)
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.verticalLayout.addWidget(self.pushButton)
self.dockWidget.setWidget(self.dockWidgetContents)
MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.dockWidget)
self.dockWidget_2 = QtGui.QDockWidget(MainWindow)
self.dockWidget_2.setObjectName(_fromUtf8("dockWidget_2"))
self.dockWidgetContents_2 = QtGui.QWidget()
self.dockWidgetContents_2.setObjectName(_fromUtf8("dockWidgetContents_2"))
self.verticalLayout_2 = QtGui.QVBoxLayout(self.dockWidgetContents_2)
self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))
self.pushButton_2 = QtGui.QPushButton(self.dockWidgetContents_2)
self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
self.verticalLayout_2.addWidget(self.pushButton_2)
self.lineEdit = QtGui.QLineEdit(self.dockWidgetContents_2)
self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
self.verticalLayout_2.addWidget(self.lineEdit)
self.dockWidget_2.setWidget(self.dockWidgetContents_2)
MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.dockWidget_2)
最佳答案
没有方便的方法来隐藏选项卡。您有两种解决方法:
使用
removeTab
和insertTab
。您需要保留对删除的选项卡的引用,以便以后能够重新插入它们(以及它们的索引,以便它们重新出现在同一位置)。使用
setTabEnabled
启用(=显示)和禁用(=隐藏)选项卡。当选项卡被禁用时,它通常会变灰,但您可以使用样式表来隐藏该选项卡:self.setTabEnabled(tabIndex,True/False) #enable/disable the tab # set the style sheet self.setStyleSheet("QTabBar::tab::disabled {width: 0; height: 0; margin: 0; padding: 0; border: none;} ")
我测试了第二个选项,在显示以前隐藏的选项卡时遇到了问题: View 未正确重绘(即使在调用 update
或 repaint
之后)。结果样式表不会自动更新,它仍然会绘制选项卡,就好像它被禁用一样。
在每次 setTabEnabled(index,True)
之后调用 setStyleSheet
可以修复该问题。它强制重新计算样式表。
关于python - 如何在 QTabWidget 中隐藏选项卡并在按下按钮时显示它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34377663/