Keep QToolbar, показывающий всегда все элементы - PullRequest
1 голос
/ 01 мая 2019

давайте рассмотрим следующий снимок экрана:

enter image description here

Вы видите, что верхняя панель инструментов отображает 2 строки;однако для этого нужно нажать на >> в правом верхнем углу (обведено красным) и удерживать курсор над областью панели инструментов, что может немного раздражать.

Есть ли способ сохранить2 строки панели инструментов всегда отображаются?

1 Ответ

2 голосов
/ 01 мая 2019

Решение:

  • Разверните QToolBar, используя макет, который в реализации частного API имеет слот setExpanded (), который позволяет расширять QToolBar.
  • Скройте кнопку, и в этом случае она работала только для установки размера QSize (0, 0).
  • Деактивируйте событие Leave из QToolBar, чтобы оно не свернулось.
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_())
...