From 1305a354eec3d1b8a5463432e8e6feefe8143805 Mon Sep 17 00:00:00 2001 From: Michael Rutherford Date: Thu, 25 Sep 2025 23:12:45 -0500 Subject: [PATCH 1/4] fix DPI awareness in Windows to accommodate 4k screens. --- src/anonymizer/anonymizer.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/anonymizer/anonymizer.py b/src/anonymizer/anonymizer.py index 1ac8447..d9e9222 100644 --- a/src/anonymizer/anonymizer.py +++ b/src/anonymizer/anonymizer.py @@ -1,4 +1,5 @@ import faulthandler +import ctypes import json import logging import os @@ -40,6 +41,13 @@ from anonymizer.view.settings.settings_dialog import SettingsDialog from anonymizer.view.welcome import WelcomeView + +# Enable DPI awareness for Windows (improves scaling on high-DPI/4K monitors) +try: + ctypes.windll.shcore.SetProcessDpiAwareness(1) +except Exception: + pass + faulthandler.enable() logger = logging.getLogger() # ROOT logger @@ -60,13 +68,15 @@ def get_app_state_path(self) -> Path: def __init__(self, logs_dir: Path): super().__init__() self.logs_dir: Path = logs_dir + ctk.set_appearance_mode("System") # Modes: "System" (standard), "Dark", "Light" theme = self.THEME_FILE if not os.path.exists(theme): logger.error(f"Theme file not found: {theme}, reverting to dark-blue theme") theme = "dark-blue" ctk.set_default_color_theme(theme) - ctk.deactivate_automatic_dpi_awareness() # TODO: implement dpi awareness for all views for Windows OS + # DPI awareness is now enabled globally for Windows above; do not deactivate here + # ctk.deactivate_automatic_dpi_awareness() # Removed for proper DPI scaling logging.info(f"ctk.ThemeManager.theme:\n{pformat(ThemeManager.theme)}") self.mono_font = self._init_mono_font() From 36083ba2a079aed24e522eb7b2e7e72f0aca0114 Mon Sep 17 00:00:00 2001 From: Michael Rutherford Date: Thu, 25 Sep 2025 23:46:04 -0500 Subject: [PATCH 2/4] add dark theme with white text --- src/anonymizer/anonymizer.py | 8 +- .../assets/themes/rsna_theme_dark.json | 185 ++++++++++++++++++ 2 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 src/anonymizer/assets/themes/rsna_theme_dark.json diff --git a/src/anonymizer/anonymizer.py b/src/anonymizer/anonymizer.py index d9e9222..045049d 100644 --- a/src/anonymizer/anonymizer.py +++ b/src/anonymizer/anonymizer.py @@ -55,6 +55,7 @@ class Anonymizer(ctk.CTk): THEME_FILE = "assets/themes/rsna_theme.json" + DARK_THEME_FILE = "assets/themes/rsna_theme_dark.json" project_open_startup_dwell_time = 100 # milliseconds metrics_loop_interval = 1000 # milliseconds @@ -70,7 +71,12 @@ def __init__(self, logs_dir: Path): self.logs_dir: Path = logs_dir ctk.set_appearance_mode("System") # Modes: "System" (standard), "Dark", "Light" - theme = self.THEME_FILE + appearance_mode = ctk.get_appearance_mode() + if appearance_mode == "Light": + theme = self.THEME_FILE + else: + theme = self.DARK_THEME_FILE + if not os.path.exists(theme): logger.error(f"Theme file not found: {theme}, reverting to dark-blue theme") theme = "dark-blue" diff --git a/src/anonymizer/assets/themes/rsna_theme_dark.json b/src/anonymizer/assets/themes/rsna_theme_dark.json new file mode 100644 index 0000000..7fe0eb1 --- /dev/null +++ b/src/anonymizer/assets/themes/rsna_theme_dark.json @@ -0,0 +1,185 @@ +{ + "CTk": { + "fg_color": ["gray95", "gray10"] + }, + "CTkToplevel": { + "fg_color": ["gray95", "gray10"] + }, + "CTkFrame": { + "corner_radius": 6, + "border_width": 0, + "fg_color": ["gray90", "gray13"], + "top_fg_color": ["gray85", "gray16"], + "border_color": ["#014F8F", "#014F8F"] + }, + "CTkButton": { + "corner_radius": 6, + "border_width": 0, + "fg_color": ["#3a7ebf", "#1f538d"], + "hover_color": ["#325882", "#14375e"], + "border_color": ["#3E454A", "#949A9F"], + "text_color": ["#DCE4EE", "#DCE4EE"], + "text_color_disabled": ["gray74", "gray60"] + }, + "CTkLabel": { + "corner_radius": 0, + "fg_color": "transparent", + "text_color": ["#014F8F", "white"] + }, + "CTkEntry": { + "corner_radius": 6, + "border_width": 2, + "fg_color": ["#F9F9FA", "#343638"], + "border_color": ["#979DA2", "#565B5E"], + "text_color": ["gray14", "gray84"], + "placeholder_text_color": ["gray52", "gray62"] + }, + "CTkCheckBox": { + "corner_radius": 6, + "border_width": 3, + "fg_color": ["#3a7ebf", "#1f538d"], + "border_color": ["#3E454A", "#949A9F"], + "hover_color": ["#325882", "#14375e"], + "checkmark_color": ["#DCE4EE", "gray90"], + "text_color": ["gray14", "gray84"], + "text_color_disabled": ["gray60", "gray45"] + }, + "CTkSwitch": { + "corner_radius": 1000, + "border_width": 3, + "button_length": 0, + "fg_color": ["#939BA2", "#4A4D50"], + "progress_color": ["#3a7ebf", "#1f538d"], + "button_color": ["gray36", "#D5D9DE"], + "button_hover_color": ["gray20", "gray100"], + "text_color": ["#014F8F", "white"], + "text_color_disabled": ["gray60", "gray45"] + }, + "CTkRadioButton": { + "corner_radius": 1000, + "border_width_checked": 6, + "border_width_unchecked": 3, + "fg_color": ["#3a7ebf", "#1f538d"], + "border_color": ["#3E454A", "#949A9F"], + "hover_color": ["#325882", "#14375e"], + "text_color": ["gray14", "gray84"], + "text_color_disabled": ["gray60", "gray45"] + }, + "CTkProgressBar": { + "corner_radius": 1000, + "border_width": 0, + "fg_color": ["#939BA2", "#4A4D50"], + "progress_color": ["#3a7ebf", "#1f538d"], + "border_color": ["gray", "gray"] + }, + "CTkSlider": { + "corner_radius": 1000, + "button_corner_radius": 1000, + "border_width": 6, + "button_length": 0, + "fg_color": ["#939BA2", "#4A4D50"], + "progress_color": ["gray40", "#AAB0B5"], + "button_color": ["#3a7ebf", "#1f538d"], + "button_hover_color": ["#325882", "#14375e"] + }, + "CTkOptionMenu": { + "corner_radius": 6, + "fg_color": ["#3a7ebf", "#1f538d"], + "button_color": ["#325882", "#14375e"], + "button_hover_color": ["#234567", "#1e2c40"], + "text_color": ["#DCE4EE", "#DCE4EE"], + "text_color_disabled": ["gray74", "gray60"] + }, + "CTkComboBox": { + "corner_radius": 6, + "border_width": 2, + "fg_color": ["#F9F9FA", "#343638"], + "border_color": ["#979DA2", "#565B5E"], + "button_color": ["#979DA2", "#565B5E"], + "button_hover_color": ["#6E7174", "#7A848D"], + "text_color": ["gray14", "gray84"], + "text_color_disabled": ["gray50", "gray45"] + }, + "CTkScrollbar": { + "corner_radius": 1000, + "border_spacing": 4, + "fg_color": "transparent", + "button_color": ["gray55", "gray41"], + "button_hover_color": ["gray40", "gray53"] + }, + "CTkSegmentedButton": { + "corner_radius": 6, + "border_width": 2, + "fg_color": ["#979DA2", "gray29"], + "selected_color": ["#3a7ebf", "#1f538d"], + "selected_hover_color": ["#325882", "#14375e"], + "unselected_color": ["#979DA2", "gray29"], + "unselected_hover_color": ["gray70", "gray41"], + "text_color": ["#DCE4EE", "#DCE4EE"], + "text_color_disabled": ["gray74", "gray60"] + }, + "CTkTextbox": { + "corner_radius": 6, + "border_width": 0, + "fg_color": ["gray90", "gray13"], + "border_color": ["#979DA2", "#565B5E"], + "text_color": ["#014F8F", "white"], + "scrollbar_button_color": ["gray55", "gray41"], + "scrollbar_button_hover_color": ["gray40", "gray53"] + }, + "CTkScrollableFrame": { + "label_fg_color": ["gray80", "gray21"] + }, + "DropdownMenu": { + "fg_color": ["gray90", "gray20"], + "hover_color": ["gray75", "gray28"], + "text_color": ["gray14", "gray84"] + }, + "Histogram" : { + "fg_color": ["gray85", "gray13"], + "bar_color": ["gray70", "gray30"], + "axis_label_color": ["gray10", "gray90"], + "wl_line_color": ["#3a7ebf", "#1f538d"], + "ww_boundary_line_color": ["#3a7ebf", "#1f538d"] + }, + "CTkFont": { + "macOS": { + "family": "San Francisco", + "size": 13, + "weight": "normal" + }, + "Windows": { + "family": "Tahoma", + "size": 13, + "weight": "normal" + }, + "Linux": { + "family": "DejaVu Sans", + "size": 13, + "weight": "normal" + } + }, + "Treeview" : { + "bg_color": ["gray90", "gray13"], + "text_color": ["#014F8F", "#1E7BC7"], + "selected_color": ["#DCE4EE", "#DCE4EE"], + "selected_bg_color": ["#3a7ebf", "#1f538d"], + "font" : { + "macOS": { + "family": "Menlo", + "size": 12, + "weight": "normal" + }, + "Windows": { + "family": "Consolas", + "size": 12, + "weight": "normal" + }, + "Linux": { + "family": "DejaVu Sans Mono", + "size": 12, + "weight": "normal" + } + } + } +} From 4b6768b84955931ec503f8af37d2cbde8fa2229a Mon Sep 17 00:00:00 2001 From: Michael Rutherford Date: Fri, 26 Sep 2025 09:18:16 -0500 Subject: [PATCH 3/4] fix empty list items --- .../assets/locales/en_US/html/6_license.html | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/anonymizer/assets/locales/en_US/html/6_license.html b/src/anonymizer/assets/locales/en_US/html/6_license.html index 4f9ef01..df73c5f 100644 --- a/src/anonymizer/assets/locales/en_US/html/6_license.html +++ b/src/anonymizer/assets/locales/en_US/html/6_license.html @@ -16,16 +16,16 @@

Dependencies

  • boto3
  • openpyxl
  • psutil
  • -
  • pylibjpeg
  • +
  • pylibjpeg
  • numpy
  • -
  • opencv-python-headless
  • -
  • easyocr
  • -
  • cryptography
  • -
  • requests
  • -
  • requests-oauthlib
  • -
  • toml
  • -
  • click
  • -
  • dataclasses-json
  • +
  • opencv-python-headless
  • +
  • easyocr
  • +
  • cryptography
  • +
  • requests
  • +
  • requests-oauthlib
  • +
  • toml
  • +
  • click
  • +
  • dataclasses-json
  • Dependencies open source licenses

    The software above, included in the RSNA DICOM Anonymizer, is released under the following licenses: From 38335bf40f4127d8a5450624999e892e01c88d1e Mon Sep 17 00:00:00 2001 From: Michael Rutherford Date: Fri, 26 Sep 2025 09:19:37 -0500 Subject: [PATCH 4/4] fix help text colors to match theme --- .../assets/locales/de/html/1_\303\274bersicht.html" | 2 +- .../locales/de/html/2_deidentifikationsprotokoll.html | 2 +- .../de/html/3_anonymisierungsprojekte_verwalten.html | 2 +- .../assets/locales/de/html/4_projekteinstellungen.html | 2 +- src/anonymizer/assets/locales/de/html/5_bedienung.html | 2 +- src/anonymizer/assets/locales/de/html/6_lizenz.html | 2 +- src/anonymizer/assets/locales/en_US/html/1_overview.html | 2 +- .../locales/en_US/html/2_deidentification protocol.html | 2 +- .../en_US/html/3_managing anonymization projects.html | 2 +- .../assets/locales/en_US/html/4_project settings.html | 2 +- src/anonymizer/assets/locales/en_US/html/5_operation.html | 2 +- src/anonymizer/assets/locales/en_US/html/6_license.html | 2 +- .../assets/locales/es/html/1_visi\303\263n general.html" | 2 +- .../es/html/2_protocolo de desidentificaci\303\263n.html" | 2 +- .../locales/es/html/3_gesti\303\263n de proyectos.html" | 2 +- .../es/html/4_configuraci\303\263n del proyecto.html" | 2 +- .../assets/locales/es/html/5_operaci\303\263n.html" | 2 +- src/anonymizer/assets/locales/es/html/6_licencia.html | 2 +- .../locales/es/html_bak/1_visi\303\263n general.html" | 2 +- .../html_bak/2_protocolo de desidentificaci\303\263n.html" | 2 +- .../es/html_bak/3_gesti\303\263n de proyectos.html" | 2 +- .../es/html_bak/4_configuraci\303\263n del proyecto.html" | 2 +- .../assets/locales/es/html_bak/5_operaci\303\263n.html" | 2 +- src/anonymizer/assets/locales/es/html_bak/6_licencia.html | 2 +- .../assets/locales/fr/html/1_aper\303\247u.html" | 2 +- .../fr/html/2_protocole de d\303\251sidentification.html" | 2 +- .../assets/locales/fr/html/3_gestion de projet.html | 2 +- .../locales/fr/html/4_param\303\250tres du projet.html" | 2 +- .../assets/locales/fr/html/5_op\303\251ration.html" | 2 +- src/anonymizer/assets/locales/fr/html/6_licence.html | 2 +- src/anonymizer/view/html_view.py | 7 ++++++- 31 files changed, 36 insertions(+), 31 deletions(-) diff --git "a/src/anonymizer/assets/locales/de/html/1_\303\274bersicht.html" "b/src/anonymizer/assets/locales/de/html/1_\303\274bersicht.html" index bf76a35..26302f9 100644 --- "a/src/anonymizer/assets/locales/de/html/1_\303\274bersicht.html" +++ "b/src/anonymizer/assets/locales/de/html/1_\303\274bersicht.html" @@ -3,7 +3,7 @@ see https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    Einführung

    Der RSNA DICOM Anonymizer ist ein plattformübergreifendes, eigenständiges De-Identifikations-Werkzeug. diff --git a/src/anonymizer/assets/locales/de/html/2_deidentifikationsprotokoll.html b/src/anonymizer/assets/locales/de/html/2_deidentifikationsprotokoll.html index 7072fae..9533128 100644 --- a/src/anonymizer/assets/locales/de/html/2_deidentifikationsprotokoll.html +++ b/src/anonymizer/assets/locales/de/html/2_deidentifikationsprotokoll.html @@ -3,7 +3,7 @@ siehe https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -

    +

    DICOM Standard zur De-Identifikation

    diff --git a/src/anonymizer/assets/locales/de/html/3_anonymisierungsprojekte_verwalten.html b/src/anonymizer/assets/locales/de/html/3_anonymisierungsprojekte_verwalten.html index 8635d52..fd8266b 100644 --- a/src/anonymizer/assets/locales/de/html/3_anonymisierungsprojekte_verwalten.html +++ b/src/anonymizer/assets/locales/de/html/3_anonymisierungsprojekte_verwalten.html @@ -3,7 +3,7 @@ siehe https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -

    +

    Verwaltung von Anonymisierungsprojekten

    diff --git a/src/anonymizer/assets/locales/de/html/4_projekteinstellungen.html b/src/anonymizer/assets/locales/de/html/4_projekteinstellungen.html index 8a9c0ee..f330d64 100644 --- a/src/anonymizer/assets/locales/de/html/4_projekteinstellungen.html +++ b/src/anonymizer/assets/locales/de/html/4_projekteinstellungen.html @@ -3,7 +3,7 @@ siehe https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    Projekteinstellungen

    diff --git a/src/anonymizer/assets/locales/de/html/5_bedienung.html b/src/anonymizer/assets/locales/de/html/5_bedienung.html index ea37b9d..52eeeed 100644 --- a/src/anonymizer/assets/locales/de/html/5_bedienung.html +++ b/src/anonymizer/assets/locales/de/html/5_bedienung.html @@ -3,7 +3,7 @@ siehe https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    Dateien importieren

    diff --git a/src/anonymizer/assets/locales/de/html/6_lizenz.html b/src/anonymizer/assets/locales/de/html/6_lizenz.html index 381ab16..e02c0fc 100644 --- a/src/anonymizer/assets/locales/de/html/6_lizenz.html +++ b/src/anonymizer/assets/locales/de/html/6_lizenz.html @@ -1,6 +1,6 @@ -
    +

    Lizenz

    Die RSNA DICOM Anonymizer-Software wird unter der RSNA Public License veröffentlicht. diff --git a/src/anonymizer/assets/locales/en_US/html/1_overview.html b/src/anonymizer/assets/locales/en_US/html/1_overview.html index deeb201..5429ef7 100644 --- a/src/anonymizer/assets/locales/en_US/html/1_overview.html +++ b/src/anonymizer/assets/locales/en_US/html/1_overview.html @@ -3,7 +3,7 @@ see https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    Introduction

    diff --git a/src/anonymizer/assets/locales/en_US/html/2_deidentification protocol.html b/src/anonymizer/assets/locales/en_US/html/2_deidentification protocol.html index 6b71ecb..b8fb65d 100644 --- a/src/anonymizer/assets/locales/en_US/html/2_deidentification protocol.html +++ b/src/anonymizer/assets/locales/en_US/html/2_deidentification protocol.html @@ -3,7 +3,7 @@ see https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    DICOM Standard De-identification Protocol

    diff --git a/src/anonymizer/assets/locales/en_US/html/3_managing anonymization projects.html b/src/anonymizer/assets/locales/en_US/html/3_managing anonymization projects.html index f74bc28..f4d8072 100644 --- a/src/anonymizer/assets/locales/en_US/html/3_managing anonymization projects.html +++ b/src/anonymizer/assets/locales/en_US/html/3_managing anonymization projects.html @@ -3,7 +3,7 @@ see https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -

    +

    Managing Anonymization Projects

    diff --git a/src/anonymizer/assets/locales/en_US/html/4_project settings.html b/src/anonymizer/assets/locales/en_US/html/4_project settings.html index 2393cc5..6d73a3f 100644 --- a/src/anonymizer/assets/locales/en_US/html/4_project settings.html +++ b/src/anonymizer/assets/locales/en_US/html/4_project settings.html @@ -3,7 +3,7 @@ see https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    Project Settings

    diff --git a/src/anonymizer/assets/locales/en_US/html/5_operation.html b/src/anonymizer/assets/locales/en_US/html/5_operation.html index 0f196f0..d5d772f 100644 --- a/src/anonymizer/assets/locales/en_US/html/5_operation.html +++ b/src/anonymizer/assets/locales/en_US/html/5_operation.html @@ -3,7 +3,7 @@ see https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    Importing files

    diff --git a/src/anonymizer/assets/locales/en_US/html/6_license.html b/src/anonymizer/assets/locales/en_US/html/6_license.html index df73c5f..a89fd1f 100644 --- a/src/anonymizer/assets/locales/en_US/html/6_license.html +++ b/src/anonymizer/assets/locales/en_US/html/6_license.html @@ -1,6 +1,6 @@ -
    +

    License

    The RSNA DICOM Anonymizer software is released under the RSNA Public License. diff --git "a/src/anonymizer/assets/locales/es/html/1_visi\303\263n general.html" "b/src/anonymizer/assets/locales/es/html/1_visi\303\263n general.html" index 99b27bd..d14cf7b 100755 --- "a/src/anonymizer/assets/locales/es/html/1_visi\303\263n general.html" +++ "b/src/anonymizer/assets/locales/es/html/1_visi\303\263n general.html" @@ -3,7 +3,7 @@ ver https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    Introducción

    diff --git "a/src/anonymizer/assets/locales/es/html/2_protocolo de desidentificaci\303\263n.html" "b/src/anonymizer/assets/locales/es/html/2_protocolo de desidentificaci\303\263n.html" index c54a2ea..f1b10e5 100755 --- "a/src/anonymizer/assets/locales/es/html/2_protocolo de desidentificaci\303\263n.html" +++ "b/src/anonymizer/assets/locales/es/html/2_protocolo de desidentificaci\303\263n.html" @@ -3,7 +3,7 @@ ver https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    Protocolo Estándar DICOM para De-Identificación

    diff --git "a/src/anonymizer/assets/locales/es/html/3_gesti\303\263n de proyectos.html" "b/src/anonymizer/assets/locales/es/html/3_gesti\303\263n de proyectos.html" index d631beb..50c4330 100755 --- "a/src/anonymizer/assets/locales/es/html/3_gesti\303\263n de proyectos.html" +++ "b/src/anonymizer/assets/locales/es/html/3_gesti\303\263n de proyectos.html" @@ -3,7 +3,7 @@ vea https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -

    +

    Gestión de Proyectos de Anonimización

    diff --git "a/src/anonymizer/assets/locales/es/html/4_configuraci\303\263n del proyecto.html" "b/src/anonymizer/assets/locales/es/html/4_configuraci\303\263n del proyecto.html" index 67d2ee1..2cc3ce2 100755 --- "a/src/anonymizer/assets/locales/es/html/4_configuraci\303\263n del proyecto.html" +++ "b/src/anonymizer/assets/locales/es/html/4_configuraci\303\263n del proyecto.html" @@ -3,7 +3,7 @@ ver https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    Configuración del Proyecto

    diff --git "a/src/anonymizer/assets/locales/es/html/5_operaci\303\263n.html" "b/src/anonymizer/assets/locales/es/html/5_operaci\303\263n.html" index a0d4b2a..caba120 100755 --- "a/src/anonymizer/assets/locales/es/html/5_operaci\303\263n.html" +++ "b/src/anonymizer/assets/locales/es/html/5_operaci\303\263n.html" @@ -3,7 +3,7 @@ ver https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    Importar archivos

    diff --git a/src/anonymizer/assets/locales/es/html/6_licencia.html b/src/anonymizer/assets/locales/es/html/6_licencia.html index 3aaf083..ccec1e7 100755 --- a/src/anonymizer/assets/locales/es/html/6_licencia.html +++ b/src/anonymizer/assets/locales/es/html/6_licencia.html @@ -1,6 +1,6 @@ -
    +

    Licencia

    El software RSNA DICOM Anonymizer se publica bajo la Licencia Pública de RSNA. diff --git "a/src/anonymizer/assets/locales/es/html_bak/1_visi\303\263n general.html" "b/src/anonymizer/assets/locales/es/html_bak/1_visi\303\263n general.html" index d437b2c..fb5ba06 100644 --- "a/src/anonymizer/assets/locales/es/html_bak/1_visi\303\263n general.html" +++ "b/src/anonymizer/assets/locales/es/html_bak/1_visi\303\263n general.html" @@ -3,7 +3,7 @@ ver https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    Introducción

    diff --git "a/src/anonymizer/assets/locales/es/html_bak/2_protocolo de desidentificaci\303\263n.html" "b/src/anonymizer/assets/locales/es/html_bak/2_protocolo de desidentificaci\303\263n.html" index f9aaf42..1293e0e 100644 --- "a/src/anonymizer/assets/locales/es/html_bak/2_protocolo de desidentificaci\303\263n.html" +++ "b/src/anonymizer/assets/locales/es/html_bak/2_protocolo de desidentificaci\303\263n.html" @@ -3,7 +3,7 @@ ver https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    Protocolo Estándar DICOM para De-Identificación

    diff --git "a/src/anonymizer/assets/locales/es/html_bak/3_gesti\303\263n de proyectos.html" "b/src/anonymizer/assets/locales/es/html_bak/3_gesti\303\263n de proyectos.html" index 54f933c..f8fb16e 100644 --- "a/src/anonymizer/assets/locales/es/html_bak/3_gesti\303\263n de proyectos.html" +++ "b/src/anonymizer/assets/locales/es/html_bak/3_gesti\303\263n de proyectos.html" @@ -3,7 +3,7 @@ ver https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -

    +

    Protocolo estándar de desidentificación DICOM

    diff --git "a/src/anonymizer/assets/locales/es/html_bak/4_configuraci\303\263n del proyecto.html" "b/src/anonymizer/assets/locales/es/html_bak/4_configuraci\303\263n del proyecto.html" index 3517c1c..de77f95 100644 --- "a/src/anonymizer/assets/locales/es/html_bak/4_configuraci\303\263n del proyecto.html" +++ "b/src/anonymizer/assets/locales/es/html_bak/4_configuraci\303\263n del proyecto.html" @@ -3,7 +3,7 @@ ver https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -

    +

    Configuración del Proyecto

    diff --git "a/src/anonymizer/assets/locales/es/html_bak/5_operaci\303\263n.html" "b/src/anonymizer/assets/locales/es/html_bak/5_operaci\303\263n.html" index b42233c..b49d6c5 100644 --- "a/src/anonymizer/assets/locales/es/html_bak/5_operaci\303\263n.html" +++ "b/src/anonymizer/assets/locales/es/html_bak/5_operaci\303\263n.html" @@ -3,7 +3,7 @@ ver https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    Importar archivos

    diff --git a/src/anonymizer/assets/locales/es/html_bak/6_licencia.html b/src/anonymizer/assets/locales/es/html_bak/6_licencia.html index 3aaf083..ccec1e7 100644 --- a/src/anonymizer/assets/locales/es/html_bak/6_licencia.html +++ b/src/anonymizer/assets/locales/es/html_bak/6_licencia.html @@ -1,6 +1,6 @@ -
    +

    Licencia

    El software RSNA DICOM Anonymizer se publica bajo la Licencia Pública de RSNA. diff --git "a/src/anonymizer/assets/locales/fr/html/1_aper\303\247u.html" "b/src/anonymizer/assets/locales/fr/html/1_aper\303\247u.html" index 01577de..c20ab92 100644 --- "a/src/anonymizer/assets/locales/fr/html/1_aper\303\247u.html" +++ "b/src/anonymizer/assets/locales/fr/html/1_aper\303\247u.html" @@ -3,7 +3,7 @@ voir https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    Introduction

    diff --git "a/src/anonymizer/assets/locales/fr/html/2_protocole de d\303\251sidentification.html" "b/src/anonymizer/assets/locales/fr/html/2_protocole de d\303\251sidentification.html" index a87e2f3..fd836d9 100644 --- "a/src/anonymizer/assets/locales/fr/html/2_protocole de d\303\251sidentification.html" +++ "b/src/anonymizer/assets/locales/fr/html/2_protocole de d\303\251sidentification.html" @@ -3,7 +3,7 @@ voir https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    Protocole de Dé-identification Standard DICOM

    diff --git a/src/anonymizer/assets/locales/fr/html/3_gestion de projet.html b/src/anonymizer/assets/locales/fr/html/3_gestion de projet.html index 934e8aa..a9973ee 100644 --- a/src/anonymizer/assets/locales/fr/html/3_gestion de projet.html +++ b/src/anonymizer/assets/locales/fr/html/3_gestion de projet.html @@ -3,7 +3,7 @@ voir https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -

    +

    Gestion des Projets d'Anonymisation

    diff --git "a/src/anonymizer/assets/locales/fr/html/4_param\303\250tres du projet.html" "b/src/anonymizer/assets/locales/fr/html/4_param\303\250tres du projet.html" index 5c912bf..2aec27c 100644 --- "a/src/anonymizer/assets/locales/fr/html/4_param\303\250tres du projet.html" +++ "b/src/anonymizer/assets/locales/fr/html/4_param\303\250tres du projet.html" @@ -3,7 +3,7 @@ voir https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    Paramètres du Projet

    diff --git "a/src/anonymizer/assets/locales/fr/html/5_op\303\251ration.html" "b/src/anonymizer/assets/locales/fr/html/5_op\303\251ration.html" index d8b5db2..e9f9261 100644 --- "a/src/anonymizer/assets/locales/fr/html/5_op\303\251ration.html" +++ "b/src/anonymizer/assets/locales/fr/html/5_op\303\251ration.html" @@ -3,7 +3,7 @@ voir https://github.com/bauripalash/tkhtmlview?tab=readme-ov-file#html-support --> -
    +

    Importer des fichiers

    diff --git a/src/anonymizer/assets/locales/fr/html/6_licence.html b/src/anonymizer/assets/locales/fr/html/6_licence.html index 3c155a2..b05cb49 100644 --- a/src/anonymizer/assets/locales/fr/html/6_licence.html +++ b/src/anonymizer/assets/locales/fr/html/6_licence.html @@ -1,6 +1,6 @@ -
    +

    Licence

    Le logiciel RSNA DICOM Anonymizer est publié sous la Licence Publique de la RSNA. diff --git a/src/anonymizer/view/html_view.py b/src/anonymizer/view/html_view.py index ba675f8..f58f223 100644 --- a/src/anonymizer/view/html_view.py +++ b/src/anonymizer/view/html_view.py @@ -50,10 +50,15 @@ def _create_widgets(self): """ + # Read the HTML content from the file with open(self.html_file_path, "r") as file: html_content = file.read() + # Replace THEME_COLOR placeholder with theme color + theme_color = self._parent._apply_appearance_mode(ctk.ThemeManager.theme["CTkLabel"]["text_color"]) + html_content = html_content.replace("THEME_COLOR", theme_color) + # Find all
  • elements and their content li_elements = re.findall(r"
  • (.*?)
  • ", html_content, re.DOTALL) li_texts = [re.sub(r"<.*?>", "", li).strip() for li in li_elements] # Remove any nested HTML tags @@ -68,7 +73,7 @@ def _create_widgets(self): height=self.HEIGHT_LINES, wrap="word", background=self._bg_color, - html=RenderHTML(self.html_file_path), ) + html_widget.set_html(html_content) html_widget.pack(fill="both", padx=10, pady=10, expand=True) html_widget.configure(state="disabled")