version 1.4.0
This commit is contained in:
Binary file not shown.
@@ -40,7 +40,7 @@ class TextToMic(tk.Tk):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
self.version = "1.3.0"
|
self.version = "1.4.0"
|
||||||
self.title(f"Text to Mic by Scorchsoft.com - v{self.version}")
|
self.title(f"Text to Mic by Scorchsoft.com - v{self.version}")
|
||||||
|
|
||||||
|
|
||||||
@@ -57,10 +57,10 @@ class TextToMic(tk.Tk):
|
|||||||
|
|
||||||
# Fixed window dimensions for all states - DEFINED ONCE as class constants
|
# Fixed window dimensions for all states - DEFINED ONCE as class constants
|
||||||
# These are the ONLY values that should be used throughout the application
|
# These are the ONLY values that should be used throughout the application
|
||||||
self.BASE_WIDTH = 600
|
self.BASE_WIDTH = 590
|
||||||
self.BASE_HEIGHT_WITH_BANNER = 860
|
self.BASE_HEIGHT_WITH_BANNER = 890
|
||||||
self.BASE_HEIGHT_NO_BANNER = 700
|
self.BASE_HEIGHT_NO_BANNER = 730
|
||||||
self.COLLAPSED_HEIGHT_WITH_BANNER = 630
|
self.COLLAPSED_HEIGHT_WITH_BANNER = 620
|
||||||
self.COLLAPSED_HEIGHT_NO_BANNER = 512
|
self.COLLAPSED_HEIGHT_NO_BANNER = 512
|
||||||
|
|
||||||
# Initial window geometry
|
# Initial window geometry
|
||||||
@@ -303,6 +303,10 @@ class TextToMic(tk.Tk):
|
|||||||
self.columnconfigure(0, weight=1)
|
self.columnconfigure(0, weight=1)
|
||||||
self.rowconfigure(0, weight=1)
|
self.rowconfigure(0, weight=1)
|
||||||
|
|
||||||
|
# Configure columns in main_frame to expand properly
|
||||||
|
main_frame.columnconfigure(0, weight=1)
|
||||||
|
main_frame.columnconfigure(1, weight=1)
|
||||||
|
|
||||||
# Store reference to main_frame for version notification
|
# Store reference to main_frame for version notification
|
||||||
self.main_frame = main_frame
|
self.main_frame = main_frame
|
||||||
|
|
||||||
@@ -353,6 +357,9 @@ class TextToMic(tk.Tk):
|
|||||||
# Voice and Tone Settings
|
# Voice and Tone Settings
|
||||||
ttk.Label(voice_frame, text="Voice Settings", font=("Arial", 10, "bold")).grid(column=0, row=0, sticky=tk.W, pady=(0, 10), columnspan=2)
|
ttk.Label(voice_frame, text="Voice Settings", font=("Arial", 10, "bold")).grid(column=0, row=0, sticky=tk.W, pady=(0, 10), columnspan=2)
|
||||||
|
|
||||||
|
# Make sure voice_frame columns expand properly
|
||||||
|
voice_frame.columnconfigure(1, weight=1)
|
||||||
|
|
||||||
# Set fixed width for all labels
|
# Set fixed width for all labels
|
||||||
label_width = 35 # Adjust this value as needed for your UI
|
label_width = 35 # Adjust this value as needed for your UI
|
||||||
|
|
||||||
@@ -403,12 +410,18 @@ class TextToMic(tk.Tk):
|
|||||||
secondary_device_menu.grid(column=1, row=3, sticky="ew", pady=(0, 5))
|
secondary_device_menu.grid(column=1, row=3, sticky="ew", pady=(0, 5))
|
||||||
secondary_device_menu.config(width=dropdown_width, style='Compact.TMenubutton')
|
secondary_device_menu.config(width=dropdown_width, style='Compact.TMenubutton')
|
||||||
|
|
||||||
|
# Make sure device_frame columns expand properly
|
||||||
|
device_frame.columnconfigure(1, weight=1)
|
||||||
|
|
||||||
# Text to Read section with proper layout
|
# Text to Read section with proper layout
|
||||||
text_read_frame = ttk.Frame(main_frame)
|
text_read_frame = ttk.Frame(main_frame)
|
||||||
text_read_frame.grid(column=0, row=4, columnspan=2, sticky="ew", pady=(10, 0))
|
text_read_frame.grid(column=0, row=4, columnspan=2, sticky="ew", pady=(10, 0))
|
||||||
text_read_frame.columnconfigure(0, weight=1) # Left side expands
|
text_read_frame.columnconfigure(0, weight=1) # Left side expands
|
||||||
text_read_frame.columnconfigure(1, weight=0) # Right side fixed width
|
text_read_frame.columnconfigure(1, weight=0) # Right side fixed width
|
||||||
|
|
||||||
|
# Make sure text_read_frame columns expand properly
|
||||||
|
text_read_frame.columnconfigure(0, weight=1)
|
||||||
|
|
||||||
# Text to Read label - Updated to match other section titles
|
# Text to Read label - Updated to match other section titles
|
||||||
ttk.Label(text_read_frame, text="Text to Read", font=("Arial", 10, "bold")).grid(column=0, row=0, sticky=tk.W, pady=(0, 10))
|
ttk.Label(text_read_frame, text="Text to Read", font=("Arial", 10, "bold")).grid(column=0, row=0, sticky=tk.W, pady=(0, 10))
|
||||||
|
|
||||||
@@ -494,7 +507,7 @@ class TextToMic(tk.Tk):
|
|||||||
#Credits
|
#Credits
|
||||||
# Banner image that links to Scorchsoft
|
# Banner image that links to Scorchsoft
|
||||||
self.banner_frame = ttk.Frame(main_frame)
|
self.banner_frame = ttk.Frame(main_frame)
|
||||||
self.banner_frame.grid(column=0, row=7, columnspan=2, pady=(10, 10))
|
self.banner_frame.grid(column=0, row=7, columnspan=2, pady=(10, 0))
|
||||||
|
|
||||||
banner_path = self.resource_path("assets/ss-banner-550.png")
|
banner_path = self.resource_path("assets/ss-banner-550.png")
|
||||||
try:
|
try:
|
||||||
@@ -1258,6 +1271,9 @@ class TextToMic(tk.Tk):
|
|||||||
settings["hide_banner"] = hide_banner
|
settings["hide_banner"] = hide_banner
|
||||||
self.save_settings_to_JSON(settings)
|
self.save_settings_to_JSON(settings)
|
||||||
|
|
||||||
|
# Ensure input elements maintain consistent width
|
||||||
|
self._maintain_consistent_width()
|
||||||
|
|
||||||
# Make sure presets are laid out correctly if visible
|
# Make sure presets are laid out correctly if visible
|
||||||
if presets_visible and hasattr(self, 'presets_manager'):
|
if presets_visible and hasattr(self, 'presets_manager'):
|
||||||
self.presets_manager.refresh_presets_display()
|
self.presets_manager.refresh_presets_display()
|
||||||
@@ -1321,6 +1337,9 @@ class TextToMic(tk.Tk):
|
|||||||
# Need to schedule this after all geometry changes are complete
|
# Need to schedule this after all geometry changes are complete
|
||||||
self.after(100, self._reposition_version_notification)
|
self.after(100, self._reposition_version_notification)
|
||||||
|
|
||||||
|
# Ensure input elements maintain consistent width
|
||||||
|
self._maintain_consistent_width()
|
||||||
|
|
||||||
def update_buttons_for_playback(self, is_playing):
|
def update_buttons_for_playback(self, is_playing):
|
||||||
"""Update button text based on playback state."""
|
"""Update button text based on playback state."""
|
||||||
try:
|
try:
|
||||||
@@ -1405,4 +1424,26 @@ class TextToMic(tk.Tk):
|
|||||||
# Then reposition it
|
# Then reposition it
|
||||||
self.version_checker._reposition_notification()
|
self.version_checker._reposition_notification()
|
||||||
|
|
||||||
|
def _maintain_consistent_width(self):
|
||||||
|
"""Ensure all input elements maintain consistent width after banner toggle."""
|
||||||
|
# Get the main frame width (accounting for padding)
|
||||||
|
main_frame_width = self.winfo_width() - 40 # subtract padding (20px on each side)
|
||||||
|
|
||||||
|
# Force update to ensure we have current dimensions
|
||||||
|
self.update_idletasks()
|
||||||
|
|
||||||
|
# Configure column weights for main components to ensure they expand properly
|
||||||
|
for frame in [self.main_frame]:
|
||||||
|
if hasattr(frame, 'columnconfigure'):
|
||||||
|
# Make all columns in the frame expandable
|
||||||
|
for i in range(frame.grid_size()[0]): # Get number of columns
|
||||||
|
frame.columnconfigure(i, weight=1)
|
||||||
|
|
||||||
|
# Ensure text input maintains its width
|
||||||
|
if hasattr(self, 'text_input'):
|
||||||
|
self.text_input.config(width=0) # Let it be sized by the grid
|
||||||
|
|
||||||
|
# Update and refresh all frames to apply the new layout
|
||||||
|
self.update_idletasks()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user