这是我的情况。 我有一个Person对象列表。
class Person():
def __init__(self, name="", age=):
self.name = name
self.uid = str( uuid.uuid4( ) )
self.age = age
我的用户界面包含一个树形视图,显示这些项目。在某些情况下,如果用户需要,他们可以有同一个人的实例。我使用加粗来突出显示那些相同的人,以便让用户知道。 问题 当用户删除树节点时,我需要知道是否应该从列表中删除实际对象。但是如果另一个实例正在使用该对象,则不应将其删除。
我的解决方案思路。 在执行删除操作之前(仅删除树节点项),我会收集在ui中使用的所有人员。
接下来,我将继续删除树视图项。
然后再收集在ui中使用的其他对象集合。
最后比较两个列表并删除未出现在第二个列表中的人员。
如果我采用这种解决方案,我是否最好进行测试?
for p in reversed(original_list):
if p not in new_list:
original_list.remove(p)
或者我应该仅收集uid号码进行比较,而不是整个对象?
这些列表可能相当庞大。
这里是我的第一次尝试处理删除操作的代码。在关闭应用程序时它会保存一个json文件。
https://gist.github.com/JokerMartini/4a78b3c5db1dff8b7ed8
这是我执行删除的函数。def delete_treewidet_items(self, ctrl):
global NODES
root = self.treeWidget.invisibleRootItem()
# delete treewidget items from gui
for item in self.treeWidget.selectedItems():
(item.parent() or root).removeChild(item)
# collect all uids used in GUI
uids_used = self.get_used_uids( root=self.treeWidget.invisibleRootItem() )
for n in reversed(NODES):
if n.uid not in uids_used:
NODES.remove(n)