Guide d'utilisateur du GUI
This commit is contained in:
1 parent
a56fc6e680
commit
5b7d4b611e
4 files changed
+49
No files matched your search
@@ -198,6 +198,8 @@ ou
|
|||||||
|
|
||||||
* Documentation complémentaire
|
* Documentation complémentaire
|
||||||
|
|
||||||
|
- [[file:docs/guide_utilisateur_gui.md][Guide utilisateur de l’interface graphique]] : actions,
|
||||||
|
vérifications et cas particuliers pour chaque étape du parcours non personnel.
|
||||||
- [[file:Script.org][Référence des étapes et des scripts]] : commandes, arguments,
|
- [[file:Script.org][Référence des étapes et des scripts]] : commandes, arguments,
|
||||||
prérequis, fichiers produits et parcours alternatifs.
|
prérequis, fichiers produits et parcours alternatifs.
|
||||||
- [[file:docs/final_output.md][Fichiers finaux dans A Rendre]] : contenu du JPEG, sélection et
|
- [[file:docs/final_output.md][Fichiers finaux dans A Rendre]] : contenu du JPEG, sélection et
|
||||||
|
|||||||
@@ -279,6 +279,7 @@ class CopienatorApp(tk.Tk):
|
|||||||
self.refaire_panel: RefaireSelection | None = None
|
self.refaire_panel: RefaireSelection | None = None
|
||||||
self.giving_names_panel: GivingNamesPanel | None = None
|
self.giving_names_panel: GivingNamesPanel | None = None
|
||||||
self.complete_giving_names_button: ttk.Button | None = None
|
self.complete_giving_names_button: ttk.Button | None = None
|
||||||
|
self.label_groups_button: ttk.Button | None = None
|
||||||
self.pending_refaire_commands: list[list[str]] = []
|
self.pending_refaire_commands: list[list[str]] = []
|
||||||
self.refaire_command_index = 0
|
self.refaire_command_index = 0
|
||||||
self._correction_progress_buffer = ""
|
self._correction_progress_buffer = ""
|
||||||
@@ -833,6 +834,7 @@ class CopienatorApp(tk.Tk):
|
|||||||
self.refaire_panel = None
|
self.refaire_panel = None
|
||||||
self.giving_names_panel = None
|
self.giving_names_panel = None
|
||||||
self.complete_giving_names_button = None
|
self.complete_giving_names_button = None
|
||||||
|
self.label_groups_button = None
|
||||||
entry = self.state_store.step(step.id) if self.state_store.evaluation else {}
|
entry = self.state_store.step(step.id) if self.state_store.evaluation else {}
|
||||||
saved_variant = entry.get("variant", step.variants[0].id)
|
saved_variant = entry.get("variant", step.variants[0].id)
|
||||||
if saved_variant not in {variant.id for variant in step.variants}:
|
if saved_variant not in {variant.id for variant in step.variants}:
|
||||||
@@ -946,6 +948,22 @@ class CopienatorApp(tk.Tk):
|
|||||||
self._update_controls()
|
self._update_controls()
|
||||||
|
|
||||||
def _render_context_controls(self, step: StepDefinition, row: int) -> int:
|
def _render_context_controls(self, step: StepDefinition, row: int) -> int:
|
||||||
|
if step.id == "annotation" and self.variant_var.get() == "grouped":
|
||||||
|
controls = ttk.Frame(self.form)
|
||||||
|
controls.grid(row=row, column=0, columnspan=2, sticky="ew", pady=(0, 8))
|
||||||
|
self.label_groups_button = ttk.Button(
|
||||||
|
controls,
|
||||||
|
text="Ouvrir les groupes de questions",
|
||||||
|
command=self._open_label_groups,
|
||||||
|
)
|
||||||
|
self.label_groups_button.pack(side="left")
|
||||||
|
ttk.Label(
|
||||||
|
controls,
|
||||||
|
text="Une ligne = un groupe. Vérifiez et enregistrez le fichier avant d’exécuter BGnot.",
|
||||||
|
wraplength=470,
|
||||||
|
justify="left",
|
||||||
|
).pack(side="left", padx=(10, 0))
|
||||||
|
return row + 1
|
||||||
if step.id == "personal_read":
|
if step.id == "personal_read":
|
||||||
controls = ttk.Frame(self.form)
|
controls = ttk.Frame(self.form)
|
||||||
controls.grid(row=row, column=0, columnspan=2, sticky="w", pady=8)
|
controls.grid(row=row, column=0, columnspan=2, sticky="w", pady=8)
|
||||||
@@ -1208,6 +1226,13 @@ class CopienatorApp(tk.Tk):
|
|||||||
evaluation = self.evaluation
|
evaluation = self.evaluation
|
||||||
self._open_desktop_path(evaluation / "Persp" if evaluation else None, "dossier Persp")
|
self._open_desktop_path(evaluation / "Persp" if evaluation else None, "dossier Persp")
|
||||||
|
|
||||||
|
def _open_label_groups(self) -> None:
|
||||||
|
evaluation = self.evaluation
|
||||||
|
self._open_desktop_path(
|
||||||
|
evaluation / "label_groups" if evaluation else None,
|
||||||
|
"fichier label_groups",
|
||||||
|
)
|
||||||
|
|
||||||
def _open_selected_copy(self) -> None:
|
def _open_selected_copy(self) -> None:
|
||||||
self._open_desktop_path(self.copy_paths.get(self.copy_var.get()), "copie")
|
self._open_desktop_path(self.copy_paths.get(self.copy_var.get()), "copie")
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,9 @@ if [[ $# -eq 0 ]]; then
|
|||||||
folder="${candidate%/}"
|
folder="${candidate%/}"
|
||||||
folder="${folder##*/}"
|
folder="${folder##*/}"
|
||||||
case "$folder" in
|
case "$folder" in
|
||||||
|
[Ee]xample|[Ee]xamples|[Dd]oc|[Dd]ocs|[Dd]ocumentation)
|
||||||
|
continue
|
||||||
|
;;
|
||||||
copienator|copienator_gui|tests|OLD|__pycache__|build|dist|*.egg-info|venv|env|node_modules)
|
copienator|copienator_gui|tests|OLD|__pycache__|build|dist|*.egg-info|venv|env|node_modules)
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -210,6 +210,25 @@ class GuiConvenienceTests(unittest.TestCase):
|
|||||||
)
|
)
|
||||||
self.assertNotEqual(self.app.current_step.id, "giving_names")
|
self.assertNotEqual(self.app.current_step.id, "giving_names")
|
||||||
|
|
||||||
|
def test_grouped_annotation_can_open_label_groups(self):
|
||||||
|
label_groups = self.evaluation / "label_groups"
|
||||||
|
label_groups.write_text("Ex 1 : 1), Ex 1 : 2)\n", encoding="utf-8")
|
||||||
|
self.app.state_store.update_step("annotation", variant="grouped")
|
||||||
|
self.app.tree.selection_set("annotation")
|
||||||
|
self.app.update()
|
||||||
|
|
||||||
|
self.assertIsNotNone(self.app.label_groups_button)
|
||||||
|
self.assertEqual(
|
||||||
|
self.app.label_groups_button.cget("text"),
|
||||||
|
"Ouvrir les groupes de questions",
|
||||||
|
)
|
||||||
|
with patch("copienator_gui.app.open_path") as opened:
|
||||||
|
self.app.label_groups_button.invoke()
|
||||||
|
opened.assert_called_once_with(label_groups)
|
||||||
|
|
||||||
|
self.app._select_variant(0)
|
||||||
|
self.assertIsNone(self.app.label_groups_button)
|
||||||
|
|
||||||
def test_batch_status_waits_until_all_jobs_are_ready(self):
|
def test_batch_status_waits_until_all_jobs_are_ready(self):
|
||||||
self.app.state_store.update_step("correction", variant="batch", last_run_variant="batch")
|
self.app.state_store.update_step("correction", variant="batch", last_run_variant="batch")
|
||||||
self.app._populate_tree()
|
self.app._populate_tree()
|
||||||
|
|||||||
Reference in new issue
Block a user