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上这样做不合适吗?
发布于 2020-12-02 13:35:28
void QStatusBar::
addPermanentWidget(QWidget *小部件,int拉伸= 0)
将给定的小部件永久添加到此状态栏,如果小部件不是此QStatusBar对象的子部件,则对其进行修复。拉伸参数用于在状态栏增长和缩小时计算给定小部件的适当大小。默认的拉伸因子是0,即给小部件一个最小的空间。
永久意味着小部件可能不会被临时消息所掩盖。它位于状态栏的最右边。
如果我对你的理解是正确的,那就试试这个:
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_())

https://stackoverflow.com/questions/65107253
复制相似问题