Python 如何使我的代码更加紧凑和优雅?
我有一段代码作为我想做的事情的原型。我正在制作一个GUI,我写的很多东西都是相同的,但变量名不同(例如,小部件几乎相同)。所以我在想是否有办法缩短代码: 原型:Python 如何使我的代码更加紧凑和优雅?,python,function,Python,Function,我有一段代码作为我想做的事情的原型。我正在制作一个GUI,我写的很多东西都是相同的,但变量名不同(例如,小部件几乎相同)。所以我在想是否有办法缩短代码: 原型: frame_widget = QtWidgets.QWidget() frame_widget.setLayout(self.button_frame) self.centralframe.addWidget(frame_widget) timer_widget = QtWidgets.QWidget() timer_widget.s
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)
是否可以使用函数或其他方法来避免代码重复?例如
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)
比如说,
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)
两个代码块之间唯一真正改变的是帧。您可以将所需的所有帧放在一个列表中,然后对其进行迭代:
frames=[self.button\u frame,self.timer\u frame]#以及您拥有的任何其他帧。。。
对于帧中帧:
frame_widget=qtwidts.QWidget()
frame_widget.setLayout(frame)
self.centralframe.addWidget(frame\u小部件)
两个代码块之间唯一真正发生变化的是帧。您可以将所需的所有帧放在一个列表中,然后对其进行迭代:
frames=[self.button\u frame,self.timer\u frame]#以及您拥有的任何其他帧。。。
对于帧中帧:
frame_widget=qtwidts.QWidget()
frame_widget.setLayout(frame)
self.centralframe.addWidget(frame\u小部件)
这并不是一个巨大的改进,但您只需制作一个匿名的元组
,将这些东西包装在小部件中并添加,然后循环:
for elem in (self.button_frame, self.timer_frame):
widget = QtWidgets.QWidget()
widget.setLayout(elem)
self.centralframe.addWidget(widget)
如果您谈论的是许多这样的元素,而不仅仅是两个,那么它会更有用
这假设您以后不依赖timer\u小部件
或frame\u小部件
的存在;如果你这样做了,你就必须修改它,使其具有某种小部件dict
,并使循环运行在str
名称和UI元素对上,这样你就可以按名称分配给dict
。这不是一个很大的改进,但你可以制作一个匿名的元组来包装小部件并添加,然后在其上循环:
for elem in (self.button_frame, self.timer_frame):
widget = QtWidgets.QWidget()
widget.setLayout(elem)
self.centralframe.addWidget(widget)
如果您谈论的是许多这样的元素,而不仅仅是两个,那么它会更有用
这假设您以后不依赖timer\u小部件
或frame\u小部件
的存在;如果这样做,您必须修改它,使其具有某种类型的小部件dict
,并使循环运行在str
名称和UI元素对上,以便您可以按名称分配给dict
。我将向类添加一个方法,为给定帧创建小部件:
def addWidget(self,frame):
widget = QtWidgets.QWidget()
widget.setLayout(frame)
self.centralframe.addWidget(widget)
return widget
然后您可以这样使用它:
frame_widget = self.addWidget(self.button_frame)
timer_widget = self.addWidget(self.timer_frame)
我将向类中添加一个方法,用于为给定帧创建小部件:
def addWidget(self,frame):
widget = QtWidgets.QWidget()
widget.setLayout(frame)
self.centralframe.addWidget(widget)
return widget
然后您可以这样使用它:
frame_widget = self.addWidget(self.button_frame)
timer_widget = self.addWidget(self.timer_frame)
谢谢我现在明白了,谢谢!我现在明白了谢谢你!我会考虑谢谢你!我会考虑