QT QTabWidget选中某个tab时表头不变
时间: 2023-07-14 16:13:02 浏览: 242
如果您想在 QTabWidget 中选中某个 tab 时保持表头不变,可以通过设置 QTabWidget 的 `setTabBar()` 方法来实现。具体地说,您可以继承 QTabBar 类并重载它的 `paintEvent()` 方法来实现自定义的表头绘制逻辑。然后,将自定义的 QTabBar 对象设置为 QTabWidget 的标签栏。
以下是一个示例代码:
```python
from PySide2.QtWidgets import QApplication, QTabWidget, QWidget, QVBoxLayout, QTabBar
from PySide2.QtGui import QPainter, QColor
from PySide2.QtCore import Qt
class CustomTabBar(QTabBar):
def paintEvent(self, event):
painter = QPainter(self)
painter.setPen(Qt.NoPen)
painter.setBrush(QColor(255, 255, 255))
painter.drawRect(self.rect())
for i in range(self.count()):
option = QStyleOptionTab()
self.initStyleOption(option, i)
if self.currentIndex() == i:
option.state |= QStyle.State_Selected
self.style().drawControl(QStyle.CE_TabBarTabShape, option, painter, self)
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.tab_widget = QTabWidget(self)
self.tab_bar = CustomTabBar(self.tab_widget)
self.tab_widget.setTabBar(self.tab_bar)
self.tab_widget.addTab(QWidget(), "Tab 1")
self.tab_widget.addTab(QWidget(), "Tab 2")
self.tab_widget.addTab(QWidget(), "Tab 3")
layout = QVBoxLayout(self)
layout.addWidget(self.tab_widget)
if __name__ == "__main__":
app = QApplication([])
widget = MyWidget()
widget.show()
app.exec_()
```
在这个例子中,我们创建了一个自定义的 `CustomTabBar` 类,它继承自 QTabBar。我们重载了 `paintEvent()` 方法来绘制我们自己的表头。在 `paintEvent()` 中,我们首先用白色填充整个标签栏的区域,然后绘制每个标签。在绘制当前选中的标签时,我们将 `option.state` 设置为 `QStyle.State_Selected`,这样它就会被高亮显示。
然后,在 `MyWidget` 中,我们创建了一个 `QTabWidget` 和一个自定义的 `CustomTabBar` 对象,并将它们关联起来。最后,我们向 `QTabWidget` 中添加了三个标签,并将 `QTabWidget` 放在了一个垂直布局中。
注意,这个例子使用了 PySide2 库来编写 Qt 应用程序。如果您使用的是 PyQt5,代码会稍微有一些不同。
阅读全文