首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PyQt5中美观地分组按钮

在PyQt5中美观地分组按钮
EN

Stack Overflow用户
提问于 2018-08-14 03:50:54
回答 1查看 302关注 0票数 1

我想做这样的事情:

我找不到任何像这样对按钮进行分组的方法。也就是说,将它们包含在矩形中,并将“标题”放在“按钮部分”中。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-14 04:30:09

您可以在QToolButtonQLabel旁边使用QGroupBox

代码语言:javascript
复制
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_())

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51829622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档