如何使我的代码更加紧凑和优雅?

2024-04-19 03:52:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一段代码作为我想做的事情的原型。我正在制作一个GUI,我写的很多东西都是相同的,但变量名不同(例如,小部件几乎相同)。所以我在想是否有办法缩短代码:

原型:

frame_widget = QtWidgets.QWidget()
frame_widget.setLayout(self.button_frame)
self.centralframe.addWidget(frame_widget)

timer_widget = QtWidgets.QWidget()
timer_widget.setLayout(self.timer_frame)
self.centralframe.addWidget(timer_widget)

是否可以使用函数或其他方法来避免代码重复


Tags: 代码self部件guiwidget事情frame原型
3条回答

比如说,

def add_widget(frame, layout):
    widget = QtWidgets.QWidget()
    widget.setLayout(layout)
    frame.addWidget(widget)

# usage
add_widget(self.centralframe, self.button_frame)
add_widget(self.centralframe, self.timer_widget)

这并不是一个巨大的改进,但您可以只制作一个匿名的tuple东西,将其包装在小部件中并添加,然后循环:

for elem in (self.button_frame, self.timer_frame):
    widget = QtWidgets.QWidget()
    widget.setLayout(elem)
    self.centralframe.addWidget(widget)

如果您正在谈论许多这样的elem,而不仅仅是两个,那么它更有用

这假设您不依赖timer_widgetframe_widget的存在;如果这样做,您必须修改它,使其具有某种类型的widget_dict,并使循环在str名称和UI元素对上运行,以便您可以按名称分配给dict

两个代码块之间唯一真正改变的是帧。您可以将所需的所有帧放在一个列表中,然后对其进行迭代:

frames = [self.button_frame, self.timer_frame] # and any other frame you have...
for frame in frames:
    frame_widget = QtWidgets.QWidget()
    frame_widget.setLayout(frame)
    self.centralframe.addWidget(frame_widget)

相关问题 更多 >