首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyQt5 GroupBox布局反馈

PyQt5 GroupBox布局反馈
EN

Code Review用户
提问于 2020-05-24 21:14:41
回答 1查看 162关注 0票数 1

我将为我的主QMainWindow导入给定的代码。(我只添加导入sys等来运行它)是否有一种更紧凑的方式来编写这行代码。输出符合我的预期。

代码语言:javascript
复制
from PyQt5.QtWidgets import *
import sys


class ButtonWidget(QWidget):

    def __init__(self):
        super(ButtonWidget, self).__init__()

        # Function
        button1 = QRadioButton("Sinus")
        button2 = QRadioButton("Cosines")
        # Color
        button3 = QRadioButton("Red")
        button4 = QRadioButton("Green")
        # Line
        button5 = QRadioButton("Solid")
        button6 = QRadioButton("Dashed")
        # Left Group
        left_group = QGroupBox("Left Group")
        left_group_layout = QVBoxLayout()
        left_group_layout.addWidget(button1)
        left_group_layout.addWidget(button2)
        left_group.setLayout(left_group_layout)
        # Middle Group
        middle_group = QGroupBox("Middle Group")
        middle_group_layout = QVBoxLayout()
        middle_group_layout.addWidget(button3)
        middle_group_layout.addWidget(button4)
        middle_group.setLayout(middle_group_layout)
        # Right Group
        right_group = QGroupBox("Right Group")
        right_group_layout = QVBoxLayout()
        right_group_layout.addWidget(button5)
        right_group_layout.addWidget(button6)
        right_group.setLayout(right_group_layout)
        # Main Group
        main_group = QGroupBox("Main Group")
        main_group_layout = QHBoxLayout()
        main_group_layout.addWidget(left_group)
        main_group_layout.addWidget(middle_group)
        main_group_layout.addWidget(right_group)
        main_group.setLayout(main_group_layout)
        # Widget
        main_widget = QWidget()
        main_widget_layout = QVBoxLayout()
        main_widget.setLayout(main_widget_layout)
        main_widget_layout.addWidget(main_group)
        # Layout Set
        self.setLayout(main_widget_layout)

        self.show()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ui = ButtonWidget()
    sys.exit(app.exec_())
EN

回答 1

Code Review用户

回答已采纳

发布于 2020-05-25 00:35:10

是的有个解决办法。显而易见的解决方案当然是使用循环。这是我使用复合词典的尝试。它在功能上相当于您的代码,可以节省大约十几行代码,但希望可以增加灵活性。这是一份快速的工作,所以也许你可以做得更深入一些。

代码语言:javascript
复制
from PyQt5.QtWidgets import *
import sys


class ButtonWidget(QWidget):

    def __init__(self):
        super(ButtonWidget, self).__init__()

        groups = {"Left Group": ("Sinus", "Cosines"),
            "Middle Group": ("Red", "Green"),
            "Right Group": ("Solid", "Dashed")
        }

        # Main Group
        main_group = QGroupBox("Main Group")
        main_group_layout = QHBoxLayout()

        # loop on group names
        for group, buttons in groups.items():
            group_box = QGroupBox(group)
            group_layout = QVBoxLayout()
            for button_text in buttons:
                group_layout.addWidget(QRadioButton(button_text))

            group_box.setLayout(group_layout)
            main_group_layout.addWidget(group_box)

        main_group.setLayout(main_group_layout)

        # Widget
        main_widget = QWidget()
        main_widget_layout = QVBoxLayout()
        main_widget.setLayout(main_widget_layout)
        main_widget_layout.addWidget(main_group)
        # Layout Set
        self.setLayout(main_widget_layout)

        self.show()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ui = ButtonWidget()
    sys.exit(app.exec_())

注意:您可能需要向生成的控件添加名称(至少按钮)。

PS:我个人使用QT设计器来构建表单,除非我需要一个高度动态的布局。在代码中添加控件是乏味的,也不那么直观。

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

https://codereview.stackexchange.com/questions/242874

复制
相关文章

相似问题

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