Выравнивание по краю объектов QToolBar

Есть два тулбара. Один из них основной, с кучей экшенов, второй с фиксированным небольшим количеством.
Располагаются они на одном поле.

Мне нужно чтобы второй был прижат к правому краю и всё остальное место занимал первый.

Я решил это не самым изящным костылём - увеличил размер первого и переопределил resizeEvent на изменение размера в зависимости от изменения окна и запретил располагать их по бокам. Но решение крайне не универсально, т.к, например, перестаёт работать если поменять их местами.

Наверняка есть заводские варианты решения этой проблемы.

Минимально воспроизводимый пример:

import sys
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QAction


class FullTextBrowser(QtWidgets.QMainWindow):

    def __init__(self):
        super().__init__()
        self.setObjectName('main')
        self.resize(750, 650)
        self.setMinimumWidth(100)

        self._createActions()
        self.main_widget = QtWidgets.QWidget()
        self.main_layout = QtWidgets.QVBoxLayout(self.main_widget)
        self.text_browser = QtWidgets.QTextBrowser()
        self.text_browser.setReadOnly(False)
        self.text_browser.setObjectName('textBrowser')

        self.main_layout.addWidget(self.text_browser)
        self.setCentralWidget(self.main_widget)

        self.sysToolBar = QtWidgets.QToolBar("Основное")
        self.sysToolBar.setAllowedAreas(Qt.BottomToolBarArea | Qt.TopToolBarArea)
        self.sysToolBar.setFloatable(False)
        self.sysToolBar.setContentsMargins(530, 0, 0, 0)
        self.sysToolBar.addAction(self.font_action)
        self.sysToolBar.addAction(self.bold_action)
        self.sysToolBar.addAction(self.italic_action)

        systbbox = QtWidgets.QHBoxLayout(self)
        systbbox.setAlignment(Qt.AlignCenter)
        systbbox.addWidget(self.sysToolBar)

        fileToolBar = QtWidgets.QToolBar("Текст")
        fileToolBar.setFloatable(False)
        fileToolBar.addAction(self.save_action)
        fileToolBar.addAction(self.sound_action)
        fileToolBar.addAction(self.close_action)

        self.addToolBar(self.sysToolBar)
        self.addToolBar(fileToolBar)

    def resizeEvent(self, a0: QtGui.QResizeEvent):
        self.sysToolBar.setContentsMargins(a0.size().width()-150, 0, 0, 0)


    def _createActions(self):
        self.save_action = QAction("1", self)
        self.sound_action = QAction("2", self)
        self.close_action = QAction("3", self)

        self.font_action = QAction("4", self)
        self.bold_action = QAction("5", self)
        self.italic_action = QAction("6", self)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = FullTextBrowser()
    w.show()
    app.exec_()

Ответы (1 шт):

Автор решения: S. Nick

Попробуйте так

import sys
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QAction


class FullTextBrowser(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.setObjectName('main')
        self.resize(750, 650)
        self.setMinimumWidth(100)

        self._createActions()
        
        self.main_widget = QtWidgets.QWidget()
        self.setCentralWidget(self.main_widget)

        self.text_browser = QtWidgets.QTextBrowser()
        
        self.main_layout = QtWidgets.QVBoxLayout(self.main_widget)
        self.main_layout.addWidget(self.text_browser)

        self.sysToolBar = QtWidgets.QToolBar("Основное")
        self.sysToolBar.addAction(self.font_action)
        self.sysToolBar.addAction(self.bold_action)
        self.sysToolBar.addAction(self.italic_action)

        systbbox = QtWidgets.QHBoxLayout()                  # - (self)
        systbbox.addWidget(self.sysToolBar,                 # !!!
            alignment=Qt.AlignHCenter,                      # !!!
            stretch=1                                       # !!!
        )

        fileToolBar = QtWidgets.QToolBar("Текст")
        fileToolBar.setFloatable(False)
        fileToolBar.addAction(self.save_action)
        fileToolBar.addAction(self.sound_action)
        fileToolBar.addAction(self.close_action)

        self.addToolBar(self.sysToolBar)
        self.addToolBar(fileToolBar)
        
        systbbox.addWidget(fileToolBar, 0)                  # !!!

        self.main_layout.insertLayout(0, systbbox)          # !!!

    def _createActions(self):
        self.save_action = QAction("1", self)
        self.sound_action = QAction("2", self)
        self.close_action = QAction("3", self)

        self.font_action = QAction("Это", self)
        self.bold_action = QAction("всегда", self)
        self.italic_action = QAction("по центру", self)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = FullTextBrowser()
    w.show()
    app.exec_()

введите сюда описание изображения

→ Ссылка