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),
|
"appetite": tk.IntVar(value=0),
|
||||||
}
|
}
|
||||||
|
|
||||||
# Create scales for symptoms
|
# Create enhanced scales for symptoms
|
||||||
symptom_labels: list[tuple[str, str]] = [
|
symptom_labels: list[tuple[str, str]] = [
|
||||||
("Depression (0-10):", "depression"),
|
("Depression", "depression"),
|
||||||
("Anxiety (0-10):", "anxiety"),
|
("Anxiety", "anxiety"),
|
||||||
("Sleep Quality (0-10):", "sleep"),
|
("Sleep Quality", "sleep"),
|
||||||
("Appetite (0-10):", "appetite"),
|
("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):
|
for idx, (label, var_name) in enumerate(symptom_labels):
|
||||||
ttk.Label(input_frame, text=label).grid(
|
self._create_enhanced_symptom_scale(
|
||||||
row=idx, column=0, sticky="w", padx=5, pady=2
|
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)
|
# Medicine tracking section (simplified)
|
||||||
ttk.Label(input_frame, text="Treatment:").grid(
|
ttk.Label(input_frame, text="Treatment:").grid(
|
||||||
@@ -688,6 +684,91 @@ class UIManager:
|
|||||||
scale.bind("<KeyRelease>", update_value_label)
|
scale.bind("<KeyRelease>", update_value_label)
|
||||||
update_value_label() # Set initial color
|
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(
|
def _create_medicine_section(
|
||||||
self, parent: ttk.Frame, bup: int, hydro: int, gaba: int, prop: int, quet: int
|
self, parent: ttk.Frame, bup: int, hydro: int, gaba: int, prop: int, quet: int
|
||||||
) -> dict[str, tk.IntVar]:
|
) -> dict[str, tk.IntVar]:
|
||||||
|
|||||||
Reference in New Issue
Block a user