You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt QTabWidget拖拽移动标签时标签文本字体临时恢复默认的问题解决咨询

PyQt QTabWidget拖拽移动标签时标签文本字体临时恢复默认的问题解决咨询

我在开发PyQt5应用时碰到了一个QTabWidget的诡异问题,想请教大家怎么解决:

一开始我给QTabWidget设置了自定义字体,代码如下,原本一切正常:

tbfont = QFont('Verdana', 14)
tab.setFont(tbfont)

但当我开启标签可移动的功能后:

tab.setMovable(True)

就出现了奇怪的现象:拖拽标签的过程中,标签上的文本会临时恢复成默认字体,只有等我把标签拖到新位置松开鼠标后,字体才会重新变回我设置的样式。

我试着给tabBar也单独设置同样的字体,结果完全没用:

tab.tabBar().setFont(tbfont)

目前我只找到一个临时的 workaround:把整个应用的字体设置成和tbfont一样,但这样做的问题是,之后我就没办法单独修改标签的字体了,不符合我的需求。

有没有大佬知道正确的解决方式?下面是我写的最小可复现代码,大家可以直接运行测试:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QTabWidget
from PyQt5.QtGui import QFont


class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setWindowTitle('PyQt QTabWidget Move test')
        self.setGeometry(100, 100, 400, 200)
        main_layout = QGridLayout(self)
        self.setLayout(main_layout)

        # create a tab widget
        tab = QTabWidget(self)

        tbfont = QFont('Verdana', 14)
        tab.setFont(tbfont)
        # First Tab
        tab1 = QWidget(self)
        
        # Second Tab
        tab2 = QWidget(self)
        
        # add pane to the tab widget
        tab.addTab(tab1, 'First')
        tab.addTab(tab2, 'Second')
        tab.setMovable(True)

        tab.tabBar().setFont(tbfont)
        
        main_layout.addWidget(tab, 0, 0, 2, 1)        

        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())

备注:内容来源于stack exchange,提问作者ACBlue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 18:09:30