PyQt自定义QTabBar后QTabWidget出现额外像素问题
自定义QTabBar并设置到QTabWidget后出现多余像素问题
我开发的应用中继承了QTabBar并对其进行自定义,随后将其设置到QTabWidget中。当标签数量超过1个时,最后一个标签的旁边会出现一个彩色像素。
最小复现示例(未继承QTabBar)
import sys from PyQt6.QtWidgets import ( QApplication ,QMainWindow ,QTabWidget ,QWidget ,QTabBar ) class MainWindow(QMainWindow): def __init__(self): super().__init__() self.tabWidget = TabWidget() self.setCentralWidget(self.tabWidget) class TabWidget(QTabWidget): def __init__(self): super().__init__() self._tabBar = QTabBar() # 实际应用中此处为自定义子类 self.setTabBar(self._tabBar) self.addTab(QWidget(), "Tab 1") self.addTab(QWidget(), "Tab 2") # 以下方式同样会出现多余像素 #self._tabBar.addTab("Tab 1") #self._tabBar.addTab("Tab 2") if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec())

虽然不易察觉,但在“Tab 2”的右下角存在一个彩色像素。无论是通过QTabWidget.addTab()还是QTabBar.addTab()添加标签,都会出现该问题,但仅在标签数量超过1个时才会显现。
无问题的对比代码
如果不通过self.setTabBar(self._tabBar)手动设置标签栏,则不会出现此问题,示例代码如下:
import sys from PyQt6.QtWidgets import ( QApplication ,QMainWindow ,QTabWidget ,QWidget ,QTabBar ) class MainWindow(QMainWindow): def __init__(self): super().__init__() self.tabWidget = TabWidget() self.setCentralWidget(self.tabWidget) class TabWidget(QTabWidget): def __init__(self): super().__init__() #self._tabBar = QTabBar(self) # 实际应用中此处为自定义子类 #self.setTabBar(self._tabBar) self.addTab(QWidget(), "Tab 1") self.addTab(QWidget(), "Tab 2") # 以下方式同样会出现多余像素 #self._tabBar.addTab("Tab 1") #self._tabBar.addTab("Tab 2") if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec())
补充说明
奇怪的是,在PyQt5中测试得到如下结果:

使用的版本信息
- PyQt6.QtCore.QT_VERSION_STR:6.4.0
- PyQt5.QtCore.QT_VERSION_STR:5.9.7
- 运行环境:Windows 11系统下的IPython控制台
内容的提问来源于stack exchange,提问作者GoblinFace
相关产品推荐
相关产品推荐

