77 lines
2.2 KiB
Python
77 lines
2.2 KiB
Python
import tkinter as tk
|
|
from tkinter import filedialog
|
|
from typing import Callable, Optional
|
|
|
|
from ui import styles
|
|
|
|
|
|
class PathPanel(tk.LabelFrame):
|
|
"""Panel con dos selectores de ruta (origen o destino)."""
|
|
|
|
def __init__(self, parent, title: str, **kwargs):
|
|
super().__init__(
|
|
parent,
|
|
text=title,
|
|
font=styles.FONT_HEADING,
|
|
padx=8,
|
|
pady=4,
|
|
**kwargs,
|
|
)
|
|
|
|
self.columnconfigure(1, weight=1)
|
|
|
|
self.path_esde = tk.StringVar()
|
|
self.path_roms = tk.StringVar()
|
|
|
|
self._add_selector(0, "ES-DE:", self.path_esde)
|
|
self._add_selector(1, "ROMs:", self.path_roms)
|
|
|
|
def _add_selector(self, row: int, label: str, var: tk.StringVar, callback: Optional[Callable] = None):
|
|
tk.Label(
|
|
self,
|
|
text=label,
|
|
width=8,
|
|
anchor="w",
|
|
font=styles.FONT_LABEL,
|
|
).grid(row=row, column=0, sticky="w", pady=2)
|
|
|
|
tk.Entry(
|
|
self,
|
|
textvariable=var,
|
|
font=styles.FONT_SMALL,
|
|
).grid(row=row, column=1, sticky="ew", padx=4, pady=2)
|
|
|
|
tk.Button(
|
|
self,
|
|
text="Buscar",
|
|
font=styles.FONT_SMALL,
|
|
command=lambda: self._choose(var, callback),
|
|
).grid(row=row, column=2, sticky="e", pady=2)
|
|
|
|
def _choose(self, var: tk.StringVar, callback: Optional[Callable]):
|
|
path = filedialog.askdirectory()
|
|
if not path:
|
|
return
|
|
var.set(path)
|
|
if callback:
|
|
callback(path)
|
|
|
|
def set_roms_callback(self, callback: Callable[[str], None]) -> None:
|
|
"""Registra callback que se invoca al cambiar la ruta de ROMs."""
|
|
for widget in self.winfo_children():
|
|
widget.destroy()
|
|
self._add_selector(0, "ES-DE:", self.path_esde)
|
|
self._add_selector(1, "ROMs:", self.path_roms, callback=callback)
|
|
|
|
def get_esde(self) -> str:
|
|
return self.path_esde.get()
|
|
|
|
def get_roms(self) -> str:
|
|
return self.path_roms.get()
|
|
|
|
def set_esde(self, value: str) -> None:
|
|
self.path_esde.set(value)
|
|
|
|
def set_roms(self, value: str) -> None:
|
|
self.path_roms.set(value)
|