小能豆

保持 QToolbar 始终显示所有项目

py

让我们考虑以下屏幕截图:

1.jpg

您可以看到顶部工具栏显示两行;但是要做到这一点,需要单击右上角的>>(红色圆圈)并继续悬停在工具栏区域上,这可能会有点烦人。

有没有办法让工具栏的两行始终显示?


阅读 15

收藏
2024-12-09

共1个答案

小能豆

解决方案是:

  • 使用布局来扩展 QToolBar,该布局在私有 API 的实现中有一个名为 setExpanded() 的插槽,允许扩展 QToolBar。
  • 隐藏按钮,在这种情况下,只能将大小设置为 QSize(0, 0)。
  • 停用 QToolBar 的 Leave 事件,以便它不会崩溃。
from PyQt5 import QtCore, QtGui, QtWidgets


class ToolBar(QtWidgets.QToolBar):
    def __init__(self, parent=None):
        super().__init__(parent)
        lay = self.findChild(QtWidgets.QLayout)
        if lay is not None:
            lay.setExpanded(True)
        QtCore.QTimer.singleShot(0, self.on_timeout)

    @QtCore.pyqtSlot()
    def on_timeout(self):
        button = self.findChild(QtWidgets.QToolButton, "qt_toolbar_ext_button")
        if button is not None:
            button.setFixedSize(0, 0)

    def event(self, e):
        if e.type() == QtCore.QEvent.Leave:
            return True
        return super().event(e)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = QtWidgets.QMainWindow()
    toolbar = ToolBar()
    for i in range(20):
        toolbar.addAction("action{}".format(i))
    w.addToolBar(QtCore.Qt.TopToolBarArea, toolbar)

    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())
2024-12-09