diff --git a/src/requex/__init__.py b/src/requex/__init__.py index 53caca1b82bc6a5f5d52524f7d74653d6843f08a..b2f0294c78dac6bfc807bdd02ea2c837e3832c18 100755 --- a/src/requex/__init__.py +++ b/src/requex/__init__.py @@ -778,7 +778,7 @@ class Requex: estado = 'disabled' if deshabilitar_alta else 'normal' botonA = ConfigIU.construye_boton( ventana, '{} {}'.format(etiqueta_alta, tipo_entidad), alta, - row, estado=estado, padx=30, sticky='E') + row, estado=estado, padx=50, sticky='E') self.__botones_iu['alta'] = botonA if baja: botonB = ConfigIU.construye_boton(ventana, 'Eliminar', baja, diff --git a/src/requex/iu.py b/src/requex/iu.py index 4035155ecec21aa5f7911e2ea4d7dc7b2db35482..19820fb5bdd524ff1f9033653f1f9340841270e1 100644 --- a/src/requex/iu.py +++ b/src/requex/iu.py @@ -162,6 +162,7 @@ class ConfigIU: def crea_ventana(titulo, raiz=None): ventana = ToplevelCentrado(raiz) if raiz else VentanaCentrada() + ventana.resizable(width=False, height=False) ventana.title(titulo) ventana.tk.call('wm', 'iconphoto', ventana._w, ConfigIU.carga_imagen(ventana, 'icono_requex-48.png')) @@ -172,15 +173,11 @@ class ConfigIU: ConfigIU.__verifica_estilo(ventana) lista = ttk.Treeview(ventana, columns=nombres_columnas, selectmode=tk.BROWSE, height=no_renglones) - lista.column('#0', width=0) valores.sort() - tipografia = font.Font(family='Helvetica', size=11, weight='normal') - ancho_min = ConfigIU.__calcula_ancho_minimo(nombres_columnas, - tipografia) - ancho_columnas, relacion_indice_lista_id =\ + ancho_min, ancho_columnas, relacion_indice_lista_id =\ ConfigIU.__llena_lista_seleccionable( - lista, valores, nombres_columnas, tipografia) + lista, valores, nombres_columnas) ConfigIU.__configura_lista_seleccionable( ventana, lista, nombres_columnas, ancho_min, ancho_columnas, evento_seleccion) @@ -367,24 +364,29 @@ class ConfigIU: foreground=ConfigIU.fixed_map('foreground'), background=ConfigIU.fixed_map('background')) - def __calcula_ancho_minimo(nombres_columnas, tipografia): + def __calcula_ancho_minimo(nombres_columnas, ancho_inicial, tipografia): ancho_min = {} for nombre in nombres_columnas: - ancho_min[nombre] = math.ceil(tipografia.measure(nombre) * 1.75) + ancho = math.ceil(tipografia.measure(nombre) * 1.75) + ancho_min[nombre] = ancho_inicial\ + if ancho < ancho_inicial else ancho return ancho_min - def __llena_lista_seleccionable(lista, valores, nombres_columnas, - tipografia): + def __llena_lista_seleccionable(lista, valores, nombres_columnas): + tipografia = font.Font(family='Helvetica', size=11, weight='normal') no_columnas = len(nombres_columnas) - ancho_max = tipografia.measure('l' * ConfigIU.ancho_ventana) - ancho_max = math.floor(ancho_max / no_columnas) + ancho_inicial = tipografia.measure('l' * ConfigIU.ancho_ventana) + ancho_inicial = math.floor(ancho_inicial / no_columnas) + ancho_min = ConfigIU.__calcula_ancho_minimo(nombres_columnas, + ancho_inicial, tipografia) relacion_indice_lista_id = {} ancho_columnas = ConfigIU.__inicializa_ancho_columnas(nombres_columnas) i = 0 for id, valor, completo in valores: valor = list(valor) ancho_columnas = ConfigIU.__calcula_ancho_columnas( - ancho_columnas, nombres_columnas, ancho_max, valor, tipografia) + ancho_columnas, nombres_columnas, ancho_inicial, valor, + tipografia) relacion_indice_lista_id[i] = id color_fondo = 'green' if completo else 'orange' lista.insert('', i, i, values=valor, tags=[color_fondo]) @@ -393,7 +395,7 @@ class ConfigIU: lon_excedente = 0 columnas_excedentes = [] for columna, ancho in ancho_columnas.items(): - excedente = ancho_max - ancho + excedente = ancho_inicial - ancho if excedente > 0: lon_excedente += excedente else: @@ -403,7 +405,7 @@ class ConfigIU: if no_columnas_excedentes else 0 for columna in columnas_excedentes: ancho_columnas[columna] += lon_excedente - return ancho_columnas, relacion_indice_lista_id + return ancho_min, ancho_columnas, relacion_indice_lista_id def __configura_lista_seleccionable( ventana, lista, nombres_columnas, ancho_min, ancho_columnas, @@ -422,6 +424,7 @@ class ConfigIU: scroll.grid(row=1, column=3, sticky='NSW') lista.configure(yscrollcommand=scroll.set) scroll.config(command=lista.yview) + lista.column('#0', width=0) def __formatea_atributo(atributo): if atributo is None: @@ -434,12 +437,12 @@ class ConfigIU: ancho_columnas[columna] = 0 return ancho_columnas - def __calcula_ancho_columnas(ancho_columnas, nombres_columnas, ancho_max, - valor_actual, tipografia): + def __calcula_ancho_columnas(ancho_columnas, nombres_columnas, + ancho_inicial, valor_actual, tipografia): for j, columna in enumerate(nombres_columnas): valor_actual[j] = ConfigIU.__formatea_atributo(valor_actual[j]) ancho = ancho_columnas[columna] - if ancho == ancho_max: + if ancho == ancho_inicial: continue ancho_actual = tipografia.measure(valor_actual[j]) + 10 if ancho_actual > ancho: