這是我的情況。 我有一個Person對象列表。刪除列表項,如果不在另一個列表中 - python
class Person():
def __init__(self, name="", age=):
self.name = name
self.uid = str(uuid.uuid4())
self.age = age
我的用戶界面包含顯示這些項目的樹形視圖。在某些情況下,如果用戶願意,用戶可以擁有同一個人的實例。我強調那些大膽的讓用戶知道它是同一個人。
的問題 當用戶刪除樹節點,然後我需要知道我是否應該從列表中刪除實際的對象。但是,如果正在使用該對象的另一個實例,則不應刪除它。
我對解決方案的想法。 在刪除操作發生之前,只刪除treenode項目,我將收集所有在ui中使用的人員。
接下來,我將繼續刪除樹視圖項目。
下一步是另一個在ui中使用的objevst集合。
Laslty比較兩個列表並刪除沒有出現在第二個列表中的人員。
如果我去這個解決方案,我建議最好不喜歡
for p in reversed(original_list):
if p not in new_list:
original_list.remove(p)
或者我應該收集的UID號,而不是一個測試做比較,而不是整個對象?
該列表可能相當大。
Herr是我第一次嘗試處理刪除操作的代碼。它可以在關閉應用程序時保存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)
什麼是你的代碼添加到UI ?你創建一個人並使用同一個實例的代碼是什麼? –
我明白了 - 所以真的問題是你有'物品',你不能從他們那裏得到人 - UI列表控件的常見問題。你的控制是否允許你以某種方式將物品連接到人員?又是你能從'物品'到'人'嗎?編輯:當然你可以 - 你有CustomTreeNode basicaly包裝perdon(爲什麼稱呼一個人的人數據)?根據我的答案重構你的代碼併發回 - 基本上你可以砍掉幾行... –