Tcl / Tk. Explorateur de fichiers alternatif pour les plates-formes Linux et Android

Plus j'écris divers programmes sur tcl / tk , plus j'admire ses capacités et sa réflexion. Mais il y avait une chose qui ne me reposait que récemment. Lors du développement d'une interface graphique, vous devez souvent utiliser l'explorateur de fichiers (tk_getSaveFile, tk_getOpenFile ou tk_chooseDirectory). Et si sur les plates-formes Windows ou OS X, l'explorateur de fichiers natif de ces plates-formes est chargé, alors sur les plates-formes Linux, l'explorateur de tcl / tk est chargé (enfin, il n'y a pas d'explorateur natif sous Linux):



Qu'est-ce qui ne vous convient pas dans cet explorateur? Ce manque d'opérations élémentaires avec des dossiers / fichiers en elle - créer, détruire, renommer. Non, ne pensez pas en soi que tous ces mécanismes sont bien sûr implémentés, ils n'existent tout simplement pas dans l'interface graphique de l'explorateur. Mais sous Linux, ce n'est pas si visible. Mais sur la plate-forme Android, le conducteur de Tcl / Tk cause beaucoup d'inconvénients:



lorsque nous parlons de la plate-forme Android, nous entendons le développement d'applications sur Androwish .

Et puis de tels moments sont venus, l'auto-isolement, etc. En conséquence, une balalaïka est née (également appelée packages / package pour tcl) tkfe (explorateur de fichiers tk).

Lors du développement du package tkfe, nous avons tenu compte non seulement du fait qu'au moins des opérations élémentaires avec des fichiers / répertoires sont nécessaires, mais également du désir d'avoir un explorateur non seulement dans une fenêtre séparée, mais également dans un cadre séparé, que l'utilisateur lui-même peut placer comme il le souhaite dans son interface graphique. Le projet propose un exemple complet d'utilisation du package. Alors, téléchargez le projet, allez dans le dossier ~ // TkFileExplorer / samples et exécutez l'exemple:

$wish tkfe_samplefull.tcl


En fait, l'exemple montre clairement toutes les fonctionnalités du package. Par exemple, exécutez Explorer pour sélectionner un dossier dans une fenêtre distincte:



Explorer lui-même a une interface en deux langues: russe et anglais. La traduction est effectuée à la volée lorsque vous cliquez sur le bouton avec le drapeau:



en plus du bouton avec le drapeau, il y a un bouton avec des outils (outils), lorsque vous cliquez dessus, le menu contextuel s'affiche, ce qui peut être fait dans le répertoire actuel (créer un répertoire / fichier) ou avec un fichier / dossier sélectionné ( supprimer / renommer):



L'une des fonctions de l'explorateur de fichiers renvoie le nom (soulignement - NOM) de la variable (voir l'exemple tkfe_samplefull.tcl), dans lequel le chemin du fichier ou du répertoire sélectionné sera écrit, ou qui sera vide si le choix est refusé. Après avoir reçu le nom de la variable, il reste à attendre quand un résultat est obtenu, par exemple:

 . . .
#   
#   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 vous utilisez le type de placement du conducteur de cadre, vous devez prendre soin de son placement dans votre image. Le placement peut se faire de n'importe quelle façon (grille, pack ou lieu). La méthode préférée est toujours la méthode du lieu. Vous n'avez pas à vous soucier de reformater l'image, car la place, contrairement à la grille et au pack, vous permet de superposer le cadre au-dessus de l'image existante:



si vous regardez attentivement l'image, vous remarquerez que la capture d'écran de droite diffère de la gauche par l'apparition de dossiers cachés dessus (les noms commencent de ce point). Pour afficher les boutons cachés, vous devez activer le bouton avec une icône en forme d'œil. Les dossiers et les fichiers peuvent également être triés par ordre alphabétique et les fichiers par taille:



Lorsque l'explorateur est placé dans le cadre, vous devez également vous occuper du blocage des boutons superflus (lorsque l'explorateur est placé dans la fenêtre, la balalaika tkfe s'en charge).

Le package tkfe comprend deux fonctions qui rendent les widgets inaccessibles (all_disable) ou disponibles (all_enable) dans un widget donné:

  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

Cependant, je préfère utiliser les fonctionnalités tk busy. Ceci est clairement vu dans l'exemple:



Ceci est une théorie. En pratique, le package tkfe a été utilisé dans un poste de travail cryptographique basé sur des normes de clé publique cryptoarmpkcs . Maintenant, l'utilisation de l'explorateur de fichiers dans cette application pour la plate-forme Linux ressemble à ceci:



Mais l'explorateur, situé dans le cadre:



Et, bien sûr, il est devenu très pratique de travailler avec l'explorateur sur la plate-forme Android:



Quelqu'un peut demander: Qu'en est-il de Windows ou OS X? Oui, tout va bien. Mais comme toujours sous Windows - c'est le problème de la russification, dans notre cas, c'est l'utilisation de l'alphabet cyrillique pour nommer les fichiers et les dossiers, ainsi que l'utilisation d'une barre oblique inverse. Par conséquent, les lignes suivantes doivent être ajoutées au code:

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

Voici à quoi ressemble l'explorateur tkfe sur la plate-forme Windows:



le package lui-même et des exemples de son utilisation sont ici .

All Articles