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