From 9f4b2ff9557f678930711460e9e7bc326f75d18f Mon Sep 17 00:00:00 2001 From: Adam Kessel Date: Thu, 18 Jun 2026 13:56:27 -0400 Subject: [PATCH 1/4] apply MacOS custom fonts PR#2575 from customtkinter --- .../windows/widgets/font/font_manager.py | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/customtkinter/windows/widgets/font/font_manager.py b/customtkinter/windows/widgets/font/font_manager.py index 48c483b..df4d5e5 100644 --- a/customtkinter/windows/widgets/font/font_manager.py +++ b/customtkinter/windows/widgets/font/font_manager.py @@ -8,6 +8,7 @@ class FontManager: linux_font_path: str = "~/.fonts/" + darwin_font_path: str = "~/Library/Fonts/" @classmethod def init_font_manager(cls) -> bool: @@ -25,6 +26,15 @@ def init_font_manager(cls) -> bool: else: return True + @classmethod + def copy_fonts(cls, font_path: str, system_font_path: str) -> bool: + try: + shutil.copy(font_path, system_font_path) + return True + except Exception as err: + sys.stderr.write("FontManager error: " + str(err) + "\n") + return False + @classmethod def windows_load_font(cls, font_path: str | bytes, private: bool = True, enumerable: bool = False) -> bool: """ Function taken from: https://stackoverflow.com/questions/11993290/truly-custom-font-in-tkinter/30631309#30631309 """ @@ -55,13 +65,13 @@ def load_font(cls, font_path: str) -> bool: # Linux elif sys.platform.startswith("linux"): - try: - shutil.copy(font_path, os.path.expanduser(cls.linux_font_path)) - return True - except Exception as err: - sys.stderr.write("FontManager error: " + str(err) + "\n") - return False + return cls.copy_fonts(font_path, os.path.expanduser(cls.linux_font_path)) + + # macOS + elif sys.platform.startswith("darwin"): + return cls.copy_fonts(font_path, os.path.expanduser(cls.darwin_font_path)) + - # macOS and others + # others else: return False From 25b0d7680648482ab858b42755f33427c3d67cd5 Mon Sep 17 00:00:00 2001 From: Adam Kessel Date: Thu, 18 Jun 2026 14:47:28 -0400 Subject: [PATCH 2/4] switch drawing method to font --- customtkinter/windows/widgets/core_rendering/__init__.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/customtkinter/windows/widgets/core_rendering/__init__.py b/customtkinter/windows/widgets/core_rendering/__init__.py index f61c644..0fe0566 100644 --- a/customtkinter/windows/widgets/core_rendering/__init__.py +++ b/customtkinter/windows/widgets/core_rendering/__init__.py @@ -15,7 +15,4 @@ CTkCanvas.init_font_character_mapping() # determine draw method based on current platform -if sys.platform == "darwin": - BaseShape.preferred_drawing_method = "polygons" -else: - BaseShape.preferred_drawing_method = "font" +BaseShape.preferred_drawing_method = "font" From 7908bc1177e494f33d29a66e31fa12355d1098ad Mon Sep 17 00:00:00 2001 From: Adam Kessel Date: Thu, 18 Jun 2026 17:37:05 -0400 Subject: [PATCH 3/4] follow up from @federicospada on PR --- customtkinter/windows/widgets/core_rendering/__init__.py | 3 --- customtkinter/windows/widgets/core_rendering/draw_engine.py | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/customtkinter/windows/widgets/core_rendering/__init__.py b/customtkinter/windows/widgets/core_rendering/__init__.py index 0fe0566..403937a 100644 --- a/customtkinter/windows/widgets/core_rendering/__init__.py +++ b/customtkinter/windows/widgets/core_rendering/__init__.py @@ -13,6 +13,3 @@ from .draw_engine import SectionType CTkCanvas.init_font_character_mapping() - -# determine draw method based on current platform -BaseShape.preferred_drawing_method = "font" diff --git a/customtkinter/windows/widgets/core_rendering/draw_engine.py b/customtkinter/windows/widgets/core_rendering/draw_engine.py index ea61ea0..7090fc0 100644 --- a/customtkinter/windows/widgets/core_rendering/draw_engine.py +++ b/customtkinter/windows/widgets/core_rendering/draw_engine.py @@ -56,7 +56,7 @@ def rototraslation(points: tuple[tuple[float | int, float | int], ...], class BaseShape: """ Provides common attributes and methods to all Shapes. """ - preferred_drawing_method: ClassVar[DrawingMethodType] = "circles" + preferred_drawing_method: ClassVar[DrawingMethodType] = "font" canvas: CTkCanvas drawing_method: DrawingMethodType = None From ddf9de23bcfc9239d030d3a05451cd19a07d33e0 Mon Sep 17 00:00:00 2001 From: Adam Kessel Date: Fri, 19 Jun 2026 12:33:00 -0400 Subject: [PATCH 4/4] revert recent changes --- customtkinter/windows/widgets/core_rendering/__init__.py | 6 ++++++ customtkinter/windows/widgets/core_rendering/draw_engine.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/customtkinter/windows/widgets/core_rendering/__init__.py b/customtkinter/windows/widgets/core_rendering/__init__.py index 403937a..f61c644 100644 --- a/customtkinter/windows/widgets/core_rendering/__init__.py +++ b/customtkinter/windows/widgets/core_rendering/__init__.py @@ -13,3 +13,9 @@ from .draw_engine import SectionType CTkCanvas.init_font_character_mapping() + +# determine draw method based on current platform +if sys.platform == "darwin": + BaseShape.preferred_drawing_method = "polygons" +else: + BaseShape.preferred_drawing_method = "font" diff --git a/customtkinter/windows/widgets/core_rendering/draw_engine.py b/customtkinter/windows/widgets/core_rendering/draw_engine.py index 7090fc0..ea61ea0 100644 --- a/customtkinter/windows/widgets/core_rendering/draw_engine.py +++ b/customtkinter/windows/widgets/core_rendering/draw_engine.py @@ -56,7 +56,7 @@ def rototraslation(points: tuple[tuple[float | int, float | int], ...], class BaseShape: """ Provides common attributes and methods to all Shapes. """ - preferred_drawing_method: ClassVar[DrawingMethodType] = "font" + preferred_drawing_method: ClassVar[DrawingMethodType] = "circles" canvas: CTkCanvas drawing_method: DrawingMethodType = None