我将为我的主QMainWindow导入给定的代码。(我只添加导入sys等来运行它)是否有一种更紧凑的方式来编写这行代码。输出符合我的预期。
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_())发布于 2020-05-25 00:35:10
是的有个解决办法。显而易见的解决方案当然是使用循环。这是我使用复合词典的尝试。它在功能上相当于您的代码,可以节省大约十几行代码,但希望可以增加灵活性。这是一份快速的工作,所以也许你可以做得更深入一些。
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设计器来构建表单,除非我需要一个高度动态的布局。在代码中添加控件是乏味的,也不那么直观。
https://codereview.stackexchange.com/questions/242874
复制相似问题