Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt5:QTabWidget中的可关闭选项卡?_Python_Pyqt5 - Fatal编程技术网

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

Python PyQt5:QTabWidget中的可关闭选项卡?,python,pyqt5,Python,Pyqt5,我一直在尝试在我的应用程序中实现QTabWidget部分,并希望能够在需要时关闭选项卡 我读到我需要将setTabsCloseable标志设置为true并添加一个pyqtSignal,但我不能这样做,因为QObject没有connect属性。 相反,我在网上找到的大多数示例都提到了QtCore.QObject.Connect()的使用 以下是一个最小可复制示例: 从PyQt5导入QtWidgets、QtCore、QtWidgets 导入系统,操作系统 类对话框\u 01(QtWidgets.QM

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

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

以下是一个最小可复制示例:

从PyQt5导入QtWidgets、QtCore、QtWidgets
导入系统,操作系统
类对话框\u 01(QtWidgets.QMainWindow):
定义初始化(自):
超级(对话框\u 01,self)。\u初始化\u()
mainWidget=qtwidts.QWidget()
self.setCentralWidget(mainWidget)
mainLayout=qtwidts.QVBoxLayout()
mainWidget.setLayout(mainLayout)
self.tabWidget=qtwidts.QTabWidget()
self.tabWidget.setTabsClosable(True)
#QtCore.QObject.connect(self.chatView、QtCore.SIGNAL('tabCloseRequested(int)')、self.closeTab)
mainLayout.addWidget(self.tabWidget)
myBoxLayout=qtwidts.QVBoxLayout()
self.tabWidget.setLayout(myBoxLayout)
self.tabWidget.addTab(qtwidts.QWidget(),'Tab_01')
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app=qtwidts.QApplication(sys.argv)
dialog_1=dialog_01()
对话框_1.show()
对话框1.调整大小(480320)
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_())

使用self.tabWidget.tabCloseRequested.connect(self.closeTab)谢谢!我知道我应该子类化,但我认为现在不子类化应该没问题。你的回答和@eyllanesc的评论都很有帮助@埃拉内斯克是PyQt的大师。。他教会了我这些技能:PHe在PyQt的第一个小项目中帮助我加载,现在当我转到一个更大的项目时又帮助我加载。很高兴有这么熟练的人,有时候缺少完整的文档是可以的。。它是新的,但现在由QT正式支持。。API实际上与PyQt相同。。仅从pyside导入。。您甚至可以使用导入编写可以从其中一个运行的代码。所以我可以通过切换导入来转换为pyside?有什么好处?