feat: enhance symptom scale creation with improved layout and dynamic value display
This commit is contained in:
+95
-14
@@ -133,25 +133,21 @@ class UIManager:
|
||||
"appetite": tk.IntVar(value=0),
|
||||
}
|
||||
|
||||
# Create scales for symptoms
|
||||
# Create enhanced scales for symptoms
|
||||
symptom_labels: list[tuple[str, str]] = [
|
||||
("Depression (0-10):", "depression"),
|
||||
("Anxiety (0-10):", "anxiety"),
|
||||
("Sleep Quality (0-10):", "sleep"),
|
||||
("Appetite (0-10):", "appetite"),
|
||||
("Depression", "depression"),
|
||||
("Anxiety", "anxiety"),
|
||||
("Sleep Quality", "sleep"),
|
||||
("Appetite", "appetite"),
|
||||
]
|
||||
|
||||
# Configure input frame columns for better layout
|
||||
input_frame.grid_columnconfigure(1, weight=1)
|
||||
|
||||
for idx, (label, var_name) in enumerate(symptom_labels):
|
||||
ttk.Label(input_frame, text=label).grid(
|
||||
row=idx, column=0, sticky="w", padx=5, pady=2
|
||||
self._create_enhanced_symptom_scale(
|
||||
input_frame, idx, label, var_name, 0, symptom_vars
|
||||
)
|
||||
ttk.Scale(
|
||||
input_frame,
|
||||
from_=0,
|
||||
to=10,
|
||||
orient=tk.HORIZONTAL,
|
||||
variable=symptom_vars[var_name],
|
||||
).grid(row=idx, column=1, sticky="ew")
|
||||
|
||||
# Medicine tracking section (simplified)
|
||||
ttk.Label(input_frame, text="Treatment:").grid(
|
||||
@@ -688,6 +684,91 @@ class UIManager:
|
||||
scale.bind("<KeyRelease>", update_value_label)
|
||||
update_value_label() # Set initial color
|
||||
|
||||
def _create_enhanced_symptom_scale(
|
||||
self,
|
||||
parent: ttk.Frame,
|
||||
row: int,
|
||||
label: str,
|
||||
key: str,
|
||||
value: int,
|
||||
vars_dict: dict[str, tk.IntVar],
|
||||
) -> None:
|
||||
"""Create enhanced symptom scale for new entry form (like edit window)."""
|
||||
# Ensure value is properly converted
|
||||
try:
|
||||
value = int(float(value)) if value not in ["", None] else 0
|
||||
except (ValueError, TypeError):
|
||||
value = 0
|
||||
|
||||
# Label
|
||||
label_widget = ttk.Label(
|
||||
parent, text=f"{label} (0-10):", font=("TkDefaultFont", 10, "bold")
|
||||
)
|
||||
label_widget.grid(row=row, column=0, sticky="w", padx=5, pady=8)
|
||||
|
||||
# Scale container
|
||||
scale_container = ttk.Frame(parent)
|
||||
scale_container.grid(row=row, column=1, sticky="ew", padx=(20, 5), pady=8)
|
||||
scale_container.grid_columnconfigure(0, weight=1)
|
||||
|
||||
# Scale with value labels
|
||||
scale_frame = ttk.Frame(scale_container)
|
||||
scale_frame.grid(row=0, column=0, sticky="ew")
|
||||
scale_frame.grid_columnconfigure(1, weight=1)
|
||||
|
||||
# Current value display
|
||||
value_label = ttk.Label(
|
||||
scale_frame,
|
||||
text=str(value),
|
||||
font=("TkDefaultFont", 12, "bold"),
|
||||
foreground="#2E86AB",
|
||||
width=3,
|
||||
)
|
||||
value_label.grid(row=0, column=0, padx=(0, 10))
|
||||
|
||||
# Scale widget
|
||||
scale = ttk.Scale(
|
||||
scale_frame,
|
||||
from_=0,
|
||||
to=10,
|
||||
variable=vars_dict[key],
|
||||
orient=tk.HORIZONTAL,
|
||||
length=250, # Slightly smaller than edit window to fit better
|
||||
)
|
||||
scale.grid(row=0, column=1, sticky="ew")
|
||||
|
||||
# Scale labels (0, 5, 10)
|
||||
labels_frame = ttk.Frame(scale_container)
|
||||
labels_frame.grid(row=1, column=0, sticky="ew", pady=(5, 0))
|
||||
|
||||
ttk.Label(labels_frame, text="0", font=("TkDefaultFont", 8)).grid(
|
||||
row=0, column=0, sticky="w"
|
||||
)
|
||||
labels_frame.grid_columnconfigure(1, weight=1)
|
||||
ttk.Label(labels_frame, text="5", font=("TkDefaultFont", 8)).grid(
|
||||
row=0, column=1
|
||||
)
|
||||
ttk.Label(labels_frame, text="10", font=("TkDefaultFont", 8)).grid(
|
||||
row=0, column=2, sticky="e"
|
||||
)
|
||||
|
||||
# Update label when scale changes
|
||||
def update_value_label(event=None):
|
||||
current_val = vars_dict[key].get()
|
||||
value_label.configure(text=str(current_val))
|
||||
# Change color based on value
|
||||
if current_val <= 3:
|
||||
value_label.configure(foreground="#28A745") # Green for low/good
|
||||
elif current_val <= 6:
|
||||
value_label.configure(foreground="#FFC107") # Yellow for medium
|
||||
else:
|
||||
value_label.configure(foreground="#DC3545") # Red for high/bad
|
||||
|
||||
scale.bind("<Motion>", update_value_label)
|
||||
scale.bind("<ButtonRelease-1>", update_value_label)
|
||||
scale.bind("<KeyRelease>", update_value_label)
|
||||
update_value_label() # Set initial color
|
||||
|
||||
def _create_medicine_section(
|
||||
self, parent: ttk.Frame, bup: int, hydro: int, gaba: int, prop: int, quet: int
|
||||
) -> dict[str, tk.IntVar]:
|
||||
|
||||
Reference in New Issue
Block a user