带滚动条的PyQt QToolBar

时间:2016-03-11 11:07:48

标签: scroll pyqt toolbar

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

2 个答案:

答案 0 :(得分:1)

您应该能够将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)

答案 1 :(得分:-1)

对于任何有兴趣的人都是解决方案:

感谢@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)