什么是使用 PyQt4 清理/删除小部件的“正确”或惯用方法?
请考虑以下代码:
上面的代码使用了
另一个可能的情况是,我有一个对话框,上面有很多小部件,我想删除这些小部件并添加新的小部件。我不想 '泄漏'旧的小部件,但我不确定应该如何正确地做这样的事情。
在我看来,也许永远不需要使用
请考虑以下代码:
choices = ['a', 'b', 'c']
checkboxes = []
layout = QtGui.QVBoxLayout()
dialog = MyDialog()
for c in choices:
checkboxes.append(QtGui.QCheckBox(c)
layout.addWidget(chkbox)
dialog.setLayout(layout)
for c in checkboxes:
c.setParent(None)
c.deleteLater()
c = None
上面的代码使用了
setParent()
, deleteLater()
和将对象设置为 None
。这些都是必要的吗?另一个可能的情况是,我有一个对话框,上面有很多小部件,我想删除这些小部件并添加新的小部件。我不想 '泄漏'旧的小部件,但我不确定应该如何正确地做这样的事情。
在我看来,也许永远不需要使用
deleteLater()
。它只是递减引用计数吗?如果是这样,那么仅将变量设置为 None 是否会产生相同的效果呢?
parent
参数?我意识到这可能有些明确,但是它是必需的吗? - durden2.0parent
参数不是必须的,但这可能是个好主意,因为它可以稍微约束一下你代码的结构,并且让其他人更容易看出预期的包含层次关系。 - EmmetRuntimeError: wrapped C/C++ object
错误” - 我该如何检查对象是否无效/已被删除?我需要一种方法来检查c
是否已被删除,但我不知道如何。请参见我的问题:https://dev59.com/1YXca4cB1Zd3GeqPP_YV - memyself