PyQt5:QTabWidget中的可关闭选项卡?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyQt5:QTabWidget中的可关闭选项卡?相关的知识,希望对你有一定的参考价值。

我一直在尝试在我的应用程序中实现QTabWidget部分,并希望能够在需要时关闭选项卡。

我读到我需要将setTabsCloseable标志设置为true并添加pyqtSignal,但是我不能这样做,因为QObject没有connect属性。相反,我在网上找到的大多数示例都提到了QtCore.QObject.Connect()

的使用

这是一个最小的可复制示例:

from PyQt5 import QtWidgets, QtCore, QtWidgets
import sys, os


class Dialog_01(QtWidgets.QMainWindow):
    def __init__(self):
        super(Dialog_01,self).__init__()

        mainWidget=QtWidgets.QWidget()
        self.setCentralWidget(mainWidget)
        mainLayout = QtWidgets.QVBoxLayout()
        mainWidget.setLayout(mainLayout)

        self.tabWidget = QtWidgets.QTabWidget()
        self.tabWidget.setTabsClosable(True)
        # QtCore.QObject.connect(self.chatView, QtCore.SIGNAL('tabCloseRequested(int)'), self.closeTab)
        mainLayout.addWidget(self.tabWidget)


        myBoxLayout = QtWidgets.QVBoxLayout()
        self.tabWidget.setLayout(myBoxLayout)

        self.tabWidget.addTab(QtWidgets.QWidget(),'Tab_01')        



if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    dialog_1 = Dialog_01()
    dialog_1.show()
    dialog_1.resize(480,320)
    sys.exit(app.exec_())
答案

您可以替代QtabWidget来合并自定义功能,并且还可以使所有内容保持良好包装。

我发现使用PyQt / Pyside覆盖类以适合某些程序是很普遍的,我强烈建议您养成习惯!

    from PyQt5 import QtWidgets, QtCore, QtWidgets
    import sys, os

    class QCustomTabWidget (QtWidgets.QTabWidget):
        def __init__ (self, parent = None):
            super(QCustomTabWidget, self).__init__(parent)
            self.setTabsClosable(True)
            self.tabCloseRequested.connect(self.closeTab) # connect to method to close
            for i in range(1, 10): # add tabs here
                self.addTab(QtWidgets.QWidget(), 'Tab %d' % i)

        def closeTab (self, currentIndex):
            currentQWidget = self.widget(currentIndex)
            currentQWidget.deleteLater()
            self.removeTab(currentIndex)


    class Dialog_01(QtWidgets.QMainWindow):
        def __init__(self):
            super(Dialog_01,self).__init__()

            mainWidget=QtWidgets.QWidget()
            self.setCentralWidget(mainWidget)
            mainLayout = QtWidgets.QVBoxLayout()
            mainWidget.setLayout(mainLayout)

            self.tabWidget = QCustomTabWidget()
            mainLayout.addWidget(self.tabWidget)


            myBoxLayout = QtWidgets.QVBoxLayout()
            self.tabWidget.setLayout(myBoxLayout)

            self.tabWidget.addTab(QtWidgets.QTextEdit(),'Tab_01')   #also add tabs here
            self.tabWidget.addTab(QtWidgets.QTextEdit(),'Tab_02')

    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        dialog_1 = Dialog_01()
        dialog_1.show()
        dialog_1.resize(480,320)
        sys.exit(app.exec_())

以上是关于PyQt5:QTabWidget中的可关闭选项卡?的主要内容,如果未能解决你的问题,请参考以下文章

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

PyQt5 动态将 QFormLayouts 添加到 QTabWidget 的选项卡中

仅在 QTabWidget 的活动选项卡上关闭按钮

避免 QTabWidget 中的重复选项卡

pyqt5选项卡区域没有填满整个可用空间

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