如何为QDockWidget的标签页和窗口标题设置不同的文本?

2024-04-20 01:01:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经将QDockWidget子类化,并通过myDockWidget.setWindowTitle("Some text")设置标题栏文本。但是,我想在小部件停靠时在选项卡中显示不同的文本。换句话说,当小部件停靠时,我希望在标题栏中显示一个字符串,在选项卡中显示另一个字符串:

enter image description here

这是可能的吗?如果有,怎么做?在


Tags: 字符串text文本部件some选项卡标题栏setwindowtitle
1条回答
网友
1楼 · 发布于 2024-04-20 01:01:21

这可以通过重新实现paintEvent并重写默认标题栏文本来实现。窗口标题仍必须用于设置选项卡文本:

class DockWidget(QtGui.QDockWidget):
    _title_text = None

    def titleText(self):
        if self._title_text is None:
            return self.windowTitle()
        return self._title_text

    def setTitleText(self, text):
        self._title_text = text
        self.repaint()

    def paintEvent(self, event):
        painter = QtGui.QStylePainter(self)
        if self.isFloating():
            options = QtGui.QStyleOptionFrame()
            options.initFrom(self)
            painter.drawPrimitive(QtGui.QStyle.PE_FrameDockWidget, options)
        options = QtGui.QStyleOptionDockWidgetV2()
        self.initStyleOption(options)
        options.title = self.titleText()
        painter.drawControl(QtGui.QStyle.CE_DockWidgetTitle, options)

dockWidget = DockWidget()
dockWidget.setWindowTitle('Tab Text')
dockWidget.setTitleText('Title Text')

附言:

请注意,另一个选项是使用setTitleBarWidget。然而,这样做的最大缺点是,你失去了所有本地的窗户装饰。在

相关问题 更多 >