重写QTabWidget控件,在每个Tab选项卡中增加一个关闭按钮,点击该关闭按钮后,可以关闭当前Tab页面
时间: 2023-10-02 15:06:04 浏览: 120
可以通过继承QTabWidget并重写tabBar的paintEvent和mousePressEvent方法,来实现在每个Tab选项卡中增加一个关闭按钮,并且点击该关闭按钮后可以关闭当前Tab页面。
下面是一个简单的示例代码:
```python
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QTabBar, QTabWidget, QWidget, QPushButton
class CloseableTabWidget(QTabWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.tabBar().setTabButton(0, QTabBar.RightSide, None) # 将第一个Tab的关闭按钮禁用
def tabInserted(self, index):
super().tabInserted(index)
close_button = QPushButton('×', self.tabBar())
close_button.setObjectName('tab_close_button')
close_button.clicked.connect(lambda: self.close_tab(index))
self.tabBar().setTabButton(index, QTabBar.RightSide, close_button)
def close_tab(self, index):
widget_to_remove = self.widget(index)
self.removeTab(index)
widget_to_remove.setParent(None)
widget_to_remove.deleteLater()
class Example(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setGeometry(300, 300, 400, 300)
tab_widget = CloseableTabWidget()
tab_widget.addTab(QWidget(), 'Tab 1')
tab_widget.addTab(QWidget(), 'Tab 2')
tab_widget.addTab(QWidget(), 'Tab 3')
layout = QVBoxLayout(self)
layout.addWidget(tab_widget)
if __name__ == '__main__':
import sys
from PyQt5.QtWidgets import QApplication, QVBoxLayout
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
```
在上述代码中,我们继承了QTabWidget,并重写了tabInserted方法,在每个Tab选项卡中增加一个关闭按钮。在关闭按钮被点击时,我们调用了自定义的close_tab方法,将对应的Tab页面从QTabWidget中删除。
阅读全文