(Qt) две строки виджетов на панели инструментов

Я не могу понять, как создать панель инструментов с двумя рядами виджетов. Я работаю над проектом Python3/Qt4.

Моя догадка:

  • добавить виджет в виджет панели инструментов

  • добавить вертикальный макет (или QGridLayout, это не имеет значения) для виджета

  • добавить кнопки панели инструментов в макет

Но все, что я получаю, это крошечная и пустая панель инструментов: мне нужно как-то "растянуть" виджет?

Мой код Python3, пытаясь вставить вертикально две кнопки на панели инструментов:

    self.main_toolbar = self.addToolBar('MyToolBar')

    self.toolbar_widget = QtGui.QWidget(self.main_toolbar)
    self.toolbar_layout = QtGui.QVBoxLayout()
    self.toolbar_widget.setLayout(self.toolbar_layout)

    button1 = QtGui.QPushButton(self)
    button1.setText("button1")
    self.toolbar_layout.addWidget( button1 )

    button2 = QtGui.QPushButton(self)
    button2.setText("button2")
    self.toolbar_layout.addWidget( button2 )

2 ответа

Код, который вы разместили, в порядке, просто вы забыли добавить свой виджет на панель инструментов.

Вы можете сделать это используя QToolBar.addWidget:

    self.main_toolbar.addWidget(self.toolbar_widget)

Все просто: вам действительно нужны две панели инструментов, одна под другой.

Вы не можете просто добавить дочерние виджеты на панель инструментов. Ваш main_toolbar предположительно из QToolBar учебный класс. Вы не можете просто добавить toolbar_widget к этому!

Ни вы не можете изменить расположение QToolBar, Панель инструментов сама управляет макетом своих дочерних элементов, вы не должны связываться с ней - она ​​не разработана таким образом.

Единственный способ добавления виджетов на панель инструментов - через addWidget метод панели инструментов, а не макета!

Ваш код неверен. Что вы можете сделать, и все, что вы можете сделать с помощью панели инструментов:

self.main_toolbar = self.addToolBar('MyToolBar')

button1 = QtGui.QPushButton(self)
button1.setText("button1")
self.main_toolbar.addWidget( button1 )

button2 = QtGui.QPushButton(self)
button2.setText("button2")
self.main_toolbar.addWidget( button2 )

То, что вы хотите сделать, просто не поддерживается панелью инструментов. Панель инструментов может, возможно, расположить свои элементы в более чем одном ряду, если они не все подходят. Это, наверное, зависит от стиля. Вы можете свободно вставлять "высокие" виджеты панели инструментов, которые имеют внутреннюю компоновку и две вложенные кнопки внутри, но это будет выглядеть очень некрасиво.

Другие вопросы по тегам