首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有办法在QStatusBar上为QDockWidget设置按钮吗?

有办法在QStatusBar上为QDockWidget设置按钮吗?
EN

Stack Overflow用户
提问于 2020-12-02 11:31:41
回答 1查看 103关注 0票数 1
代码语言:javascript
复制
from PyQt5 import QtWidgets
from PyQt5 import QtCore
import sys


class MyQStatusBar(QtWidgets.QStatusBar):
    def __init__(self, parent=None):
        super(MyQStatusBar, self).__init__(parent)
        self.horizontalLayout2 = QtWidgets.QHBoxLayout(self)
        self.horizontalLayout2.setContentsMargins(1, 1, 1, 1)


        self.toolButton = QtWidgets.QToolButton(self)
        self.toolButton.setMaximumSize(QtCore.QSize(12, 12))
        self.toolButton.setObjectName("toolButton")
        self.horizontalLayout2.addWidget(self.toolButton)

        self.toolButton_2 = QtWidgets.QToolButton(self)
        self.toolButton_2.setMaximumSize(QtCore.QSize(12, 12))
        self.toolButton_2.setIconSize(QtCore.QSize(12, 12))
        self.toolButton_2.setObjectName("toolButton_2")
        self.horizontalLayout2.addWidget(self.toolButton_2)


class MainUI(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainUI, self).__init__()
        self.dock = QtWidgets.QDockWidget(self)
        bar = MyQStatusBar(self.dock)
        self.dock.setTitleBarWidget(bar)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    main = MainUI()
    main.show()
    sys.exit(app.exec_())

我想为QDockWidget向QStatusBar添加一些自定义的小按钮,我为QStatusBar创建了两个ToolButtons,addWidget(),但是只能显示一个,或者在QDockWidget上这样做不合适吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-02 13:35:28

void QStatusBar::addPermanentWidget(QWidget *小部件,int拉伸= 0)

将给定的小部件永久添加到此状态栏,如果小部件不是此QStatusBar对象的子部件,则对其进行修复。拉伸参数用于在状态栏增长和缩小时计算给定小部件的适当大小。默认的拉伸因子是0,即给小部件一个最小的空间。

永久意味着小部件可能不会被临时消息所掩盖。它位于状态栏的最右边。

如果我对你的理解是正确的,那就试试这个:

代码语言:javascript
复制
import sys
from PyQt5 import QtWidgets, QtCore
from PyQt5.Qt import *


#class MyQStatusBar(QtWidgets.QStatusBar):                             # -
class MyQStatusBar(QtWidgets.QWidget):                                 # + QWidget
    def __init__(self):
        super(MyQStatusBar, self).__init__()
        self.horizontalLayout2 = QtWidgets.QHBoxLayout(self)
        self.horizontalLayout2.setContentsMargins(1, 1, 1, 1)
        self.horizontalLayout2.setObjectName("horizontalLayout_2")
        self.toolButton_2 = QtWidgets.QToolButton(self)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.toolButton_2.sizePolicy().hasHeightForWidth())
        self.toolButton_2.setSizePolicy(sizePolicy)
        self.toolButton_2.setMaximumSize(QtCore.QSize(12, 12))
        self.toolButton_2.setIconSize(QtCore.QSize(12, 12))
        self.toolButton_2.setObjectName("toolButton_2")
        self.horizontalLayout2.addWidget(self.toolButton_2)
        self.toolButton = QtWidgets.QToolButton(self)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.toolButton.sizePolicy().hasHeightForWidth())
        self.toolButton.setSizePolicy(sizePolicy)
        self.toolButton.setMaximumSize(QtCore.QSize(12, 12))
        self.toolButton.setObjectName("toolButton")
        self.horizontalLayout2.addWidget(self.toolButton)


class MainUI(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainUI, self).__init__()
        self.center_text = QTextEdit("center_text")
        self.setCentralWidget(self.center_text)       

        self.dock = QtWidgets.QDockWidget('Dock Window 1', self)
        self.dock.setAllowedAreas(Qt.RightDockWidgetArea | Qt.LeftDockWidgetArea)
        self.dock.setFeatures(QDockWidget.DockWidgetMovable | QDockWidget.DockWidgetFloatable)
        self.addDockWidget(Qt.RightDockWidgetArea, self.dock)
        
        self.textEdit = QTextEdit("textEdit for Dock Window 1")
        self.bar = MyQStatusBar()
        self.status_bar = QStatusBar()
        self.status_bar.addPermanentWidget(self.bar)
        self.status_bar.setSizeGripEnabled(False)  
        self.status_bar.showMessage("Hello MyQStatusBar", msecs=7000)

        widget = QWidget()
        layout = QVBoxLayout(widget)
        layout.addWidget(self.textEdit)
        # layout.addStretch()
        layout.addWidget(self.status_bar)
        
        self.dock.setWidget(widget)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    main = MainUI()
    main.show()
    sys.exit(app.exec_())

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65107253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档