1

我想做这样的事情:

在此处输入图像描述

我无法找到任何方法来对按钮进行分组。即,将它们括在矩形中并在该“按钮部分”中放置“标题”。

在 PyQt5 中可以做到这一点吗?

4

1 回答 1

2

您可以在 a和 aQGroupBox旁边使用 a :QToolButtonQLabel

import sys
from PyQt5 import QtCore, QtGui, QtWidgets

data = [{
        "title": " Y Axis Variables",
        "buttons": [{
                "text": "Add/Quit/Modify",
                "path_icon": "Add.png"
            },
            {
                "text": "Calculate Var",
                "path_icon": "calculate.png"
            },
            {
                "text": "Delete Cal Var",
                "path_icon": "delete.png"
            }
        ]
    },
    {
        "title": "Project",
        "buttons": [{
                "text": "Save",
                "path_icon": "save.png"
            },
            {
                "text": "Add Tab",
                "path_icon": "add.png"
            }
        ]
    }
]


class ToolButton(QtWidgets.QWidget):
    def __init__(self, text, path_icon, parent=None):
        super(ToolButton, self).__init__(parent)
        lay = QtWidgets.QVBoxLayout(self)
        toolButton = QtWidgets.QToolButton()
        toolButton.setIcon(QtGui.QIcon(path_icon))
        toolButton.setIconSize(QtCore.QSize(64, 64))
        label = QtWidgets.QLabel(text)
        lay.addWidget(toolButton, 0, QtCore.Qt.AlignCenter)
        lay.addWidget(label, 0, QtCore.Qt.AlignCenter)
        lay.setContentsMargins(0, 0, 0, 0)


class GroupButton(QtWidgets.QGroupBox):
    def __init__(self, info, parent=None):
        super(GroupButton, self).__init__(parent)
        title = info["title"]
        self.setTitle(title)
        hlay = QtWidgets.QHBoxLayout(self)
        for info_button in info["buttons"]:
            text = info_button["text"]
            path_icon = info_button["path_icon"]
            btn = ToolButton(text, path_icon)
            hlay.addWidget(btn)
        hlay.setContentsMargins(5, 5, 5, 5)
        self.setFixedSize(self.sizeHint())

class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        vlay = QtWidgets.QVBoxLayout(self)
        hlay = QtWidgets.QHBoxLayout()
        for val in data:
            gb = GroupButton(val)
            hlay.addWidget(gb)
        hlay.addStretch()
        vlay.addLayout(hlay)
        vlay.addStretch()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())

在此处输入图像描述

于 2018-08-13T20:30:08.960 回答