Skip to content

Commit 1aeb1c0

Browse files
committed
Fix for on Voice settings window for Windows
1 parent a4287ec commit 1aeb1c0

File tree

2 files changed

+68
-4
lines changed

2 files changed

+68
-4
lines changed

gui.py

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,12 @@ def _setup_ctk_menu(self):
243243

244244
# Menu Settings
245245
settings_button = self.menu_bar.add_cascade("Settings")
246-
self.settings_menu = CTkMenuBar.CustomDropdownMenu(widget=settings_button)
246+
self.settings_menu = CTkMenuBar.CustomDropdownMenu(
247+
widget=settings_button,
248+
corner_radius=3,
249+
border_width=1,
250+
border_color=("gray70", "gray25")
251+
)
247252

248253
# Voice settings
249254
self.voice_settings_item = self.settings_menu.add_option("Voice settings...",
@@ -265,14 +270,24 @@ def _setup_ctk_menu(self):
265270

266271
# Menu Actions
267272
actions_button = self.menu_bar.add_cascade("Actions")
268-
self.actions_menu = CTkMenuBar.CustomDropdownMenu(widget=actions_button)
273+
self.actions_menu = CTkMenuBar.CustomDropdownMenu(
274+
widget=actions_button,
275+
corner_radius=3,
276+
border_width=1,
277+
border_color=("gray70", "gray25")
278+
)
269279
self.demo_menu_item = self.actions_menu.add_option("Generate HTML Demo...",
270280
command=self.start_demo_generation_thread,
271281
state='disabled')
272282

273283
# Menu Help
274284
help_button = self.menu_bar.add_cascade("Help")
275-
self.help_menu = CTkMenuBar.CustomDropdownMenu(widget=help_button)
285+
self.help_menu = CTkMenuBar.CustomDropdownMenu(
286+
widget=help_button,
287+
corner_radius=3,
288+
border_width=1,
289+
border_color=("gray70", "gray25")
290+
)
276291
self.help_menu.add_option("Documentation (Github)...", command=self.open_documentation)
277292
self.help_menu.add_option("About...", command=self.show_about_window)
278293

@@ -354,7 +369,11 @@ def rebuild_tts_provider_menu_ctk(self):
354369

355370
if both_keys:
356371
# Créer un sous-menu TTS provider
357-
self.tts_submenu = CTkMenuBar.CustomDropdownMenu()
372+
self.tts_submenu = CTkMenuBar.CustomDropdownMenu(
373+
corner_radius=3,
374+
border_width=1,
375+
border_color=("gray70", "gray25")
376+
)
358377

359378
# Ajouter les options
360379
current_provider = self.app_settings.get("tts_provider", "elevenlabs")

settings_window.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import threading
44
import json
55
import keyring
6+
import sys
67
import customtkinter
78

89
from gui import AVAILABLE_VOICES
@@ -27,6 +28,46 @@ def __init__(self, parent, current_settings, save_callback, close_callback, defa
2728
self.transient(parent)
2829
self.grab_set()
2930

31+
# Fix pour le bandeau de titre sombre sur Windows
32+
if sys.platform == "win32":
33+
try:
34+
# Cette méthode force Windows à utiliser un bandeau de titre sombre
35+
# compatible avec le mode sombre de l'application
36+
self.after(10, lambda: self.wm_attributes("-alpha", 0.99))
37+
self.after(20, lambda: self.wm_attributes("-alpha", 1.0))
38+
# Alternative plus robuste pour Windows 10/11
39+
try:
40+
import ctypes
41+
from ctypes import wintypes
42+
43+
# Constantes Windows pour le mode sombre
44+
DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 = 19
45+
DWMWA_USE_IMMERSIVE_DARK_MODE = 20
46+
47+
# Obtenir le handle de la fenêtre
48+
hwnd = int(self.wm_frame(), 16)
49+
50+
# Essayer d'abord avec la nouvelle constante (Windows 10 20H1+)
51+
try:
52+
ctypes.windll.dwmapi.DwmSetWindowAttribute(
53+
hwnd,
54+
DWMWA_USE_IMMERSIVE_DARK_MODE,
55+
ctypes.byref(ctypes.c_int(1)),
56+
ctypes.sizeof(ctypes.c_int)
57+
)
58+
except:
59+
# Fallback pour les versions plus anciennes
60+
ctypes.windll.dwmapi.DwmSetWindowAttribute(
61+
hwnd,
62+
DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1,
63+
ctypes.byref(ctypes.c_int(1)),
64+
ctypes.sizeof(ctypes.c_int)
65+
)
66+
except Exception as e:
67+
logging.debug(f"Could not set dark title bar: {e}")
68+
except Exception as e:
69+
logging.debug(f"Title bar styling failed: {e}")
70+
3071
self.gemini_api_configured = bool(keyring.get_password("PodcastGenerator", "gemini_api_key"))
3172
self.elevenlabs_api_configured = bool(keyring.get_password("PodcastGenerator", "elevenlabs_api_key"))
3273

@@ -65,6 +106,10 @@ def __init__(self, parent, current_settings, save_callback, close_callback, defa
65106
self.check_voices_update()
66107

67108
self.update_idletasks()
109+
# Forcer une largeur minimale sous Windows pour éviter une fenêtre trop étroite à l'ouverture
110+
if sys.platform == "win32":
111+
self.geometry("800x600") # Définit une taille de départ raisonnable
112+
68113
x = parent.winfo_x() + (parent.winfo_width() - self.winfo_width()) // 2
69114
y = parent.winfo_y() + (parent.winfo_height() - self.winfo_height()) // 2
70115
self.geometry(f"+{x}+{y}")

0 commit comments

Comments
 (0)