如何在 QTabWidget 中隐藏选项卡并在按下按钮时显示它

Posted

技术标签:

【中文标题】如何在 QTabWidget 中隐藏选项卡并在按下按钮时显示它【英文标题】:How to hide a tab in QTabWidget and show it when a button is pressed 【发布时间】:2015-12-20 03:25:45 【问题描述】:

我已经在 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)

【问题讨论】:

【参考方案1】:

没有方便的方法来隐藏选项卡。您有两种解决方法:

    使用removeTabinsertTab。您需要保留对已删除选项卡的引用,以便以后能够重新插入它们(以及它们的索引,以便它们重新出现在同一位置)。

    使用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; ")
    

我测试了第二个选项,但在显示之前隐藏的选项卡时遇到了问题:视图未正确重绘(即使在调用 updaterepaint 之后)。原来样式表没有自动更新,它仍然绘制选项卡,就好像它被禁用了一样。 在每个setTabEnabled(index,True) 之后调用setStyleSheet 可以解决问题。它强制重新计算样式表。

【讨论】:

我之前测试过这个,不是每次都设置样式表,你可以设置一次,然后每次使用抛光/取消抛光重新应用。例如。 self.style()->unpolish(self) 之类的东西;然后self-style()->polish(self);【参考方案2】:

从 PyQT 5.15 版开始,您可以使用setTabVisible(index, visible)。它将隐藏给定索引处的选项卡。当您将 visible 传递为 true 时,它​​将显示选项卡和索引将保持不变。

【讨论】:

doc.qt.io/qt-5/…

以上是关于如何在 QTabWidget 中隐藏选项卡并在按下按钮时显示它的主要内容,如果未能解决你的问题,请参考以下文章

如何在按下按钮的同时选择两个下拉选项时显示隐藏div

PyQt5 QTabWidget:如何在类和同一窗口中包含的选项卡之间切换?

PyQT Qtabwidget 隐藏和关闭某些选项卡

Android:如何在按下按钮时关闭一个活动并在按下另一个按钮时关闭整个后台堆栈? [复制]

如何在按下按钮后每 10 分钟重复一次方法并在按下另一个按钮时结束它

QTabWidget 如何只隐藏窗格?