带滚动条的 PyQt QToolBar

PyQt QToolBar with scrollbar

我需要创建一个包含许多按钮的工具栏(例如在左侧)。默认情况下,如果所有按钮的总高度大于工具栏的高度,这些多余的按钮将被隐藏。我想让这个工具栏显示所有按钮,并允许我向下滚动以查看其余按钮。到目前为止,我在网上找不到任何有用的东西。有什么想法吗?

您应该可以将 QToolBar 粘贴到 QScrollArea 中。

toolbar = QtGui.QToolBar()
toolbar.setOrientation(QtCore.Qt.Vertical)
for i in range(20):
    toolbar.addAction('Action{0}'.format(i))
scroll_area = QtGui.QScrollArea()
scroll_area.setWidget(toolbar)

对于任何感兴趣的人,这里是解决方案:

感谢@Brendan Abel 的回答,我想到了一个主意。我所做的是像以前一样创建我的工具栏。然后我用 QVBoxLayout 添加了我所有的小部件(以前在这个工具栏中)到新的 QWidget。然后我创建了一个 QScrollArea 并将我最近创建的小部件设置为该滚动区域的子小部件。最后,我使用 addWidget() 将我的 ScrollArea 添加到工具栏。

class LeftToolbar(QtGui.QToolBar):
    def __init__(self, *args):
        QToolBar.__init__(self, *args)
        self.setFloatable(False)
        self.setMovable(False)

        self.scroll_widget = QtGui.QWidget(self)
        self.scroll_layout = QtGui.QVBoxLayout()
        self.scroll_widget.setLayout(self.scroll_layout)

        # Add your toolbar widgets here
        self.ExampleWidget1 = QtGui.QLabel(self)
        self.ExampleWidget1.setText("Example Text1")
        self.scroll_layout.addWidget(self.ExampleWidget1)

        self.ExampleWidget2 = QtGui.QLabel(self)
        self.ExampleWidget2.setText("Example Text2")
        self.scroll_layout.addWidget(self.ExampleWidget2)

        # Create QScrollArea
        self.scroll_area = QtGui.QScrollArea()
        self.scroll_area.setWidget(self.scroll_widget)
        self.addWidget(self.scroll_area)

# Create object LeftToolbar in your main window
self.LeftToolbar = LeftToolbar()
self.addToolBar(Qt.LeftToolBarArea, self.LeftToolbar)