Поместите QpushButton в выпадающее меню, если размер/ширина окна/панели инструментов уменьшены

У меня есть QToolBar, полный QPushButtons. Поскольку размер окна изменяется, чтобы уменьшить его ширину, ширина панели инструментов уменьшается. Если ширина уменьшается до определенной точки, кнопки начинают исчезать. Я думаю, ситуация понятна.

Бывают определенные ситуации, когда кто-то должен уменьшить ширину окна, поэтому установка минимальной ширины не может быть и речи.

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

Я думал поместить эти кнопки в раскрывающееся меню, поскольку размер вдовы уменьшается. (Есть ли другой способ?) Я даже не знаю, с чего начать. Если бы кто-нибудь мог сказать мне, как это сделать, или указать мне правильное направление, это было бы здорово.

import sys

from PySide2.QtWidgets import *
from PySide2 import *

class MainWindow(QWidget):
   def __init__(self):
       super(MainWindow, self).__init__()
       self.resize(500, 400)
       self.setMinimumSize(200, 200)

       toolbar = QToolBar()
       toolbar.setStyleSheet("QToolBar{"
                          "background: rgb(60, 60, 60);}")
       toolbar.setFixedHeight(30)

      a = QPushButton()
      a.setFixedSize(25, 25)
      a.setText("a")
      a.setStyleSheet("QPushButton{"
                    "color: red;"
                    "background: yellow;}")
      b = QPushButton()
      b.setFixedSize(25, 25)
      b.setText("b")
      b.setStyleSheet("QPushButton{"
                    "color: red;"
                    "background: yellow;}")
      c = QPushButton()
      c.setFixedSize(25, 25)
      c.setText("c")
      c.setStyleSheet("QPushButton{"
                    "color: red;"
                    "background: yellow;}")
      d = QPushButton()
      d.setFixedSize(25, 25)
      d.setText("d")
      d.setStyleSheet("QPushButton{"
                    "color: red;"
                    "background: yellow;}")
      e = QPushButton()
      e.setFixedSize(25, 25)
      e.setText("e")
      e.setStyleSheet("QPushButton{"
                    "color: red;"
                    "background: yellow;}")
      f = QPushButton()
      f.setFixedSize(25, 25)
      f.setText("f")
      f.setStyleSheet("QPushButton{"
                    "color: red;"
                    "background: yellow;}")
      g = QPushButton()
      g.setFixedSize(25, 25)
      g.setText("g")
      g.setStyleSheet("QPushButton{"
                    "color: red;"
                    "background: yellow;}")
      h = QPushButton()
      h.setFixedSize(25, 25)
      h.setText("h")
      h.setStyleSheet("QPushButton{"
                    "color: red;"
                    "background: yellow;}")
      i = QPushButton()
      i.setFixedSize(25, 25)
      i.setText("i")
      i.setStyleSheet("QPushButton{"
                    "color: red;"
                    "background: yellow;}")
      j = QPushButton()
      j.setFixedSize(25, 25)
      j.setText("j")
      j.setStyleSheet("QPushButton{"
                    "color: red;"
                    "background: yellow}")
      k = QPushButton()
      k.setFixedSize(25, 25)
      k.setText("k")
      k.setStyleSheet("QPushButton{"
                    "color: red;"
                    "background: yellow;}")

      l = QPushButton()
      l.setFixedSize(25, 25)
      l.setText("l")
      l.setStyleSheet("QPushButton{"
                    "color: red;"
                    "background: yellow;}")

      m = QPushButton()
      m.setFixedSize(25, 25)
      m.setText("m")
      m.setStyleSheet("QPushButton{"
                    "color: red;"
                    "background: yellow;}")

      n = QPushButton()
      n.setFixedSize(25, 25)
      n.setText("n")
      n.setStyleSheet("QPushButton{"
                    "color: red;"
                    "background: yellow;}")

      o = QPushButton()
      o.setFixedSize(25, 25)
      o.setText("o")
      o.setStyleSheet("QPushButton{"
                    "color: red;"
                    "background: yellow;}")

      toolbar.addWidget(a)
      toolbar.addWidget(b)
      toolbar.addWidget(c)
      toolbar.addWidget(d)
      toolbar.addWidget(e)
      toolbar.addWidget(f)
      toolbar.addWidget(g)
      toolbar.addWidget(h)
      toolbar.addWidget(i)
      toolbar.addWidget(j)
      toolbar.addWidget(k)
      toolbar.addWidget(l)
      toolbar.addWidget(m)
      toolbar.addWidget(n)
      toolbar.addWidget(o)

      #solution

      toolbar.addAction("m", "m")
      toolbar.addAction("w", "w")
      toolbar.addAction("q", "q")
      toolbar.setStyleSheet("QToolBar{background: grey;}"
                          "QToolButton { background:yellow ;"
                          "color: red;}")          


      layout = QVBoxLayout()
      layout.addWidget(toolbar)
      self.setLayout(layout)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = MainWindow()
    MainWindow.show()
    sys.exit(app.exec_())

person x0_0x    schedule 13.05.2020    source источник
comment
предоставьте минимальный воспроизводимый пример   -  person eyllanesc    schedule 13.05.2020
comment
В зависимости от выбранного стиля QToolBar должен предоставлять некоторые средства доступа к кнопкам, которые становятся невидимыми из-за изменения размера панели инструментов.   -  person G.M.    schedule 13.05.2020
comment
@eyllanesc Я добавил немного кода...   -  person x0_0x    schedule 13.05.2020
comment
Из документов Qt: Когда размер панели инструментов изменяется таким образом, что она слишком мала для отображения всех содержащихся в ней элементов, кнопка расширения отображается как последний элемент на панели инструментов. При нажатии кнопки расширения появится меню, содержащее элементы, которые в данный момент не помещаются на панели инструментов. Это может работать только с действиями, а не с виджетами. Я настоятельно рекомендую использовать действия вместо добавления кнопок в качестве виджетов. Обратите внимание, что вместо этого вы можете применить таблицу стилей к своей панели инструментов (замените QPushButton на QToolButton, который представляет каждое действие).   -  person ypnos    schedule 13.05.2020
comment
Это был хороший указатель на решение. Спасибо @ypnos.   -  person x0_0x    schedule 13.05.2020


Ответы (1)


Вместо использования QPushButtons я добавил в QToolBar следующие действия:

toolbar.addAction("m", "m")
toolbar.addAction("w", "w")
toolbar.addAction("q", "q")
toolbar.setStyleSheet("QToolBar{background:grey;}"
                          "QToolButton {background:yellow ;"
                          "color: red;}")
person x0_0x    schedule 13.05.2020