Skip to content

Commit 8916818

Browse files
authored
Merge pull request #103 from DeepLabCut/fix_new_kpt
Fix data display when new keypoints are found in the config
2 parents 874965b + 8e9157f commit 8916818

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

src/napari_deeplabcut/_widgets.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -894,11 +894,13 @@ def on_insert(self, event):
894894
# been added and the body part names are different from the existing ones,
895895
# then we update store's metadata and menus.
896896
if layer.metadata.get("project", "") and self._stores:
897+
new_metadata = layer.metadata.copy()
898+
897899
keypoints_menu = self._menus[0].menus["label"]
898900
current_keypoint_set = set(
899901
keypoints_menu.itemText(i) for i in range(keypoints_menu.count())
900902
)
901-
new_keypoint_set = set(layer.metadata["header"].bodyparts)
903+
new_keypoint_set = set(new_metadata["header"].bodyparts)
902904
diff = new_keypoint_set.difference(current_keypoint_set)
903905
if diff:
904906
answer = QMessageBox.question(
@@ -909,28 +911,29 @@ def on_insert(self, event):
909911

910912
self.viewer.status = f"New keypoint{'s' if len(diff) > 1 else ''} {', '.join(diff)} found."
911913
for _layer, store in self._stores.items():
912-
_layer.metadata["header"] = layer.metadata["header"]
914+
_layer.metadata["header"] = new_metadata["header"]
913915
store.layer = _layer
914916

915917
for menu in self._menus:
916918
menu._map_individuals_to_bodyparts()
917919
menu._update_items()
918920

921+
# Remove the unnecessary layer newly added
922+
QTimer.singleShot(10, self.viewer.layers.pop)
923+
919924
# Always update the colormap to reflect the one in the config.yaml file
920925
for _layer, store in self._stores.items():
921-
_layer.metadata["face_color_cycles"] = layer.metadata[
926+
_layer.metadata["face_color_cycles"] = new_metadata[
922927
"face_color_cycles"
923928
]
924929
_layer.face_color = "label"
925-
_layer.face_color_cycle = layer.metadata["face_color_cycles"][
930+
_layer.face_color_cycle = new_metadata["face_color_cycles"][
926931
"label"
927932
]
928933
_layer.events.face_color()
929934
store.layer = _layer
930935
self._update_color_scheme()
931936

932-
# Remove the unnecessary layer newly added
933-
QTimer.singleShot(10, self.viewer.layers.pop)
934937
return
935938

936939
store = keypoints.KeypointStore(self.viewer, layer)
@@ -1108,6 +1111,7 @@ def __init__(
11081111
self.setLayout(layout1)
11091112

11101113
def _map_individuals_to_bodyparts(self):
1114+
self.id2label.clear() # Empty dict so entries are ordered as in the config
11111115
for keypoint in self.store._keypoints:
11121116
label = keypoint.label
11131117
id_ = keypoint.id
@@ -1412,4 +1416,5 @@ def reset(self):
14121416
self.scheme_dict = {}
14131417
for i in reversed(range(self._layout.count())):
14141418
w = self._layout.itemAt(i).widget()
1419+
w.setParent(None)
14151420
self._layout.removeWidget(w)

0 commit comments

Comments
 (0)