Tcl / Tk. Explorador de archivos alternativo para plataformas Linux y Android

Cuanto más tiempo escribo varios programas en tcl / tk , más admiro sus capacidades y consideración. Pero había una cosa que no me dio descanso hasta hace poco. Al desarrollar una GUI, a menudo tiene que usar el explorador de archivos (tk_getSaveFile, tk_getOpenFile o tk_chooseDirectory). Y si en plataformas Windows u OS X, se carga el explorador de archivos nativo de estas plataformas, entonces en plataformas Linux se carga el explorador de tcl / tk (bueno, no hay explorador nativo en Linux):



¿Qué no te conviene en este explorador? Esta falta de operaciones elementales con carpetas / archivos en él: crear, destruir, renombrar. No, no piense en tcl todos estos mecanismos están, por supuesto, implementados, simplemente no existen en la GUI de Explorer. Pero en Linux, esto no es tan notable. Pero en la plataforma Android, el conductor de Tcl / Tk causa muchos inconvenientes:



cuando hablamos de la plataforma Android, nos referimos al desarrollo de aplicaciones en Androwish .

Y entonces han llegado esos momentos , el autoaislamiento, etc. Como resultado, nació una balalaika (también llamada / paquetes para tcl) tkfe (tk file explorer).

Al desarrollar el paquete tkfe, tomamos en cuenta no solo que al menos las operaciones elementales con archivos / directorios son necesarias, sino también el deseo de tener un explorador no solo en una ventana separada, sino también en un marco separado, que el usuario mismo puede colocar como lo desee en su GUI. El proyecto tiene un ejemplo completo del uso del paquete. Entonces, descargue el proyecto, vaya a la carpeta ~ // TkFileExplorer / samples y ejecute el ejemplo:

$wish tkfe_samplefull.tcl


En realidad, el ejemplo demuestra claramente todas las características del paquete. Por ejemplo, ejecute Explorer para seleccionar una carpeta en una ventana separada:



Explorer tiene una interfaz en dos idiomas: ruso e inglés. La traducción se realiza sobre la marcha cuando hace clic en el botón con la bandera:



además del botón con la bandera, hay un botón con herramientas (herramientas), cuando se hace clic, se muestra el menú contextual, qué se puede hacer en el directorio actual (crear un directorio / archivo) o con un archivo / carpeta seleccionado ( eliminar / renombrar):



Cualquiera de las funciones del explorador de archivos devuelve el nombre (subrayado - NOMBRE) de la variable (consulte el ejemplo tkfe_samplefull.tcl), en el que se escribirá la ruta al archivo o directorio seleccionado, o que estará vacía si se rechaza la opción. Después de recibir el nombre de la variable, queda esperar cuando se obtiene algún resultado, por ejemplo:

 . . .
#   
#   window -  ; frame -  
set typew "window"
#  
 set msk "*.txt *.doc *.crt * .*"
# 
set tekdir $env(HOME)
#  
 set vrr [FE::fe_getopenfile  $typew $w $tekdir $msk]
# 
 vwait $vrr
. . .

Si usa el tipo de ubicación del conductor del cuadro, entonces necesita cuidar su ubicación en su imagen. La colocación puede ser de cualquier manera (cuadrícula, paquete o lugar). El método preferido sigue siendo el método de lugar. No tiene que preocuparse por volver a formatear la imagen, ya que el lugar, a diferencia de la cuadrícula y el paquete, le permite superponer el marco en la parte superior de la imagen existente:



si observa cuidadosamente la imagen, notará que la captura de pantalla derecha difiere de la izquierda por la aparición de carpetas ocultas (los nombres comienzan desde el punto). Para mostrar botones ocultos, debe habilitar el botón con un icono en forma de ojo. Las carpetas y los archivos también se pueden ordenar alfabéticamente, y los archivos por tamaño:



Cuando el explorador se coloca en el marco, también debe ocuparse de bloquear botones extraños (cuando el explorador se coloca en la ventana, el tkfe balalaika se encarga de esto).

El paquete tkfe incluye dos funciones que hacen que los widgets sean inaccesibles (all_disable) o estén disponibles (all_enable) dentro de un widget dado:

  proc all_disable {parent} {
    set widgets [info commands $parent*]
    foreach w $widgets {
	catch {$w configure -state disabled}
    }
  }
  proc all_enable {parent} {
    set widgets [info commands $parent*]
    foreach w $widgets {
	catch {$w configure -state normal}
    }
  }
  namespace export fe_getsavefile
  namespace export fe_getopenfile
  namespace export fe_choosedir
  namespace export all_enable
  namespace export all_disable

Sin embargo, prefiero usar las funciones tk busy. Esto se ve claramente en el ejemplo:



esta es una teoría. En la práctica, el paquete tkfe se utilizó en estaciones de trabajo criptográficas basadas en estándares de clave pública cryptoarmpkcs . Ahora el uso del explorador de archivos en esta aplicación para la plataforma Linux se ve así:



Pero el explorador, ubicado en el marco:



Y, por supuesto, se volvió muy conveniente trabajar con el explorador en la plataforma Android:



Alguien puede preguntar: ¿Qué pasa con Windows u OS X? Si, todo es genial. Pero, como siempre en Windows, este es el problema de la rusificación, en nuestro caso es el uso del alfabeto cirílico para nombrar archivos y carpetas, así como el uso de una barra invertida. Por lo tanto, las siguientes líneas deben agregarse al código:

#    
# MS Win    cp1251
set tekdir [encoding convertfrom cp1251 $tekdir ]
#       
set tekdir [string map {"\\" "/"} $tekdir]

Así es como se ve el explorador tkfe en la plataforma Windows:



el paquete en sí y los ejemplos de su uso están aquí .

All Articles