fix: align mods view column headers with data rows
- Use padx=(8,4) consistently for the name column in both header and rows, removing the leading-space text hack in row labels - Add a 16px spacer at the right end of the header to compensate for CTkScrollableFrame's internal scrollbar width - Centre-align Downloaded and Linked columns (header + tick/cross labels) - Unify update button width to 80px to match header col width
This commit is contained in:
@@ -184,19 +184,22 @@ class ModsView(BaseView):
|
||||
fg_color=("gray82", "gray22"), corner_radius=6)
|
||||
col_hdr.grid(row=0, column=0, sticky="ew", padx=4, pady=(6, 2))
|
||||
col_hdr.columnconfigure(0, weight=1)
|
||||
for col, (w, lbl_key) in enumerate([
|
||||
(0, "mods.col_name"),
|
||||
(80, "mods.col_downloaded"),
|
||||
(80, "mods.col_linked"),
|
||||
(160, "mods.col_server"),
|
||||
(80, ""),
|
||||
for col, (w, lbl_key, anc) in enumerate([
|
||||
(0, "mods.col_name", "w"),
|
||||
(80, "mods.col_downloaded", "center"),
|
||||
(80, "mods.col_linked", "center"),
|
||||
(160, "mods.col_server", "w"),
|
||||
(80, "", "center"),
|
||||
]):
|
||||
ctk.CTkLabel(col_hdr, text=t(lbl_key) if lbl_key else "",
|
||||
font=ctk.CTkFont(weight="bold"),
|
||||
anchor="w", width=w or 1).grid(
|
||||
anchor=anc, width=w or 1).grid(
|
||||
row=0, column=col,
|
||||
padx=(10 if col == 0 else 4, 4), pady=5,
|
||||
padx=(8 if col == 0 else 4, 4), pady=5,
|
||||
sticky="ew" if col == 0 else "")
|
||||
# Spacer compensates for CTkScrollableFrame's internal scrollbar width
|
||||
# so the header columns line up with the data rows below.
|
||||
ctk.CTkLabel(col_hdr, text="", width=16).grid(row=0, column=5, padx=0)
|
||||
|
||||
# Scrollable rows
|
||||
scroll = ctk.CTkScrollableFrame(tab_frame)
|
||||
@@ -239,23 +242,23 @@ class ModsView(BaseView):
|
||||
row.columnconfigure(0, weight=1)
|
||||
|
||||
# Mod name
|
||||
name_lbl = ctk.CTkLabel(row, text=f" {mod['name']}", anchor="w")
|
||||
name_lbl.grid(row=0, column=0, sticky="ew", padx=4, pady=3)
|
||||
name_lbl = ctk.CTkLabel(row, text=mod["name"], anchor="w")
|
||||
name_lbl.grid(row=0, column=0, sticky="ew", padx=(8, 4), pady=3)
|
||||
|
||||
# Downloaded
|
||||
ctk.CTkLabel(
|
||||
row,
|
||||
text=" ✓" if downloaded else " ✗",
|
||||
text="✓" if downloaded else "✗",
|
||||
text_color=COLOR_OK if downloaded else COLOR_ERROR,
|
||||
width=80, anchor="w",
|
||||
width=80, anchor="center",
|
||||
).grid(row=0, column=1, padx=4)
|
||||
|
||||
# Linked
|
||||
ctk.CTkLabel(
|
||||
row,
|
||||
text=" ✓" if linked else (" —" if not downloaded else " ✗"),
|
||||
text="✓" if linked else ("—" if not downloaded else "✗"),
|
||||
text_color=COLOR_OK if linked else "gray",
|
||||
width=80, anchor="w",
|
||||
width=80, anchor="center",
|
||||
).grid(row=0, column=2, padx=4)
|
||||
|
||||
# Server status
|
||||
@@ -267,7 +270,7 @@ class ModsView(BaseView):
|
||||
# Update button (hidden until stale detected)
|
||||
folder_name = folder_path.name if folder_path else None
|
||||
update_btn = ctk.CTkButton(
|
||||
row, text=t("mods.update_btn"), width=70,
|
||||
row, text=t("mods.update_btn"), width=80,
|
||||
command=(lambda g=group, fn=folder_name:
|
||||
self._update_mod(g, fn)) if folder_name else None,
|
||||
state="normal" if folder_name else "disabled",
|
||||
|
||||
Reference in New Issue
Block a user