Tcl / Tk. Explorador de arquivos alternativo para plataformas Linux e Android

Quanto mais eu escrevo vários programas no tcl / tk , mais admiro suas capacidades e consideração. Mas havia uma coisa que não me deu descanso até recentemente. Ao desenvolver uma GUI, você geralmente precisa usar o gerenciador de arquivos (tk_getSaveFile, tk_getOpenFile ou tk_chooseDirectory). E se nas plataformas Windows ou OS X, o explorador de arquivos nativo dessas plataformas for carregado, nas plataformas Linux o explorador de tcl / tk será carregado (bem, não há explorador nativo no Linux):



O que não combina com você neste explorador? Essa falta de operações elementares com pastas / arquivos - crie, destrua, renomeie. Não, não pense que todos esses mecanismos foram implementados, é claro, simplesmente não existem na GUI do Explorer. Mas no Linux, isso não é tão perceptível. Mas na plataforma Android, o condutor do Tcl / Tk causa muitos inconvenientes:



quando falamos sobre a plataforma Android, queremos dizer o desenvolvimento de aplicativos no Androwish .

E então esses tempos chegaram, auto-isolamento, etc. Como resultado, nasceu uma balalaica (também chamada / packages para tcl) tkfe (tk file explorer).

Ao desenvolver o pacote tkfe, levamos em conta não apenas que pelo menos operações elementares com arquivos / diretórios são necessárias, mas também o desejo de ter um explorador não apenas em uma janela separada, mas também em um quadro separado, que o próprio usuário pode colocar como desejar em sua GUI. O projeto tem um exemplo abrangente de uso do pacote. Portanto, faça o download do projeto, vá para a pasta ~ // TkFileExplorer / samples e execute o exemplo:

$wish tkfe_samplefull.tcl


Na verdade, o exemplo demonstra claramente todos os recursos do pacote. Por exemplo, execute o Explorer para selecionar uma pasta em uma janela separada:



O próprio Explorer possui uma interface em dois idiomas: russo e inglês. A tradução é realizada em tempo real quando você clica no botão com a bandeira:



Além do botão com a bandeira, há um botão com ferramentas (ferramentas), quando clicado, o menu de contexto é exibido, o que pode ser feito no diretório atual (criar um diretório / arquivo) ou com um arquivo / pasta selecionado ( excluir / renomear):



Qualquer uma das funções do gerenciador de arquivos retorna o nome (sublinhado - NAME) da variável (consulte o exemplo tkfe_samplefull.tcl), no qual o caminho para o arquivo ou diretório selecionado será gravado ou ficará vazio se a escolha for recusada. Após receber o nome da variável, resta aguardar a obtenção de qualquer resultado, por exemplo:

 . . .
#   
#   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
. . .

Se você usar o tipo de posicionamento do condutor do quadro, precisará cuidar do posicionamento na imagem. O posicionamento pode ser de qualquer forma (grade, pacote ou local). O método preferido ainda é o método place. Você não precisa se preocupar em reformatar a imagem, pois o lugar, ao contrário da grade e do pacote, permite sobrepor o quadro na parte superior da imagem existente:



se você observar cuidadosamente a imagem, notará que a captura de tela correta difere da esquerda pela aparência de pastas ocultas (nomes começam a partir do ponto). Para mostrar botões ocultos, você deve habilitar o botão com um ícone em forma de olho. Pastas e arquivos também podem ser classificados em ordem alfabética e arquivos por tamanho:



Quando o explorer é colocado no quadro, você também deve bloquear os botões estranhos (quando o explorador é colocado na janela, a tkfe balalaica cuida disso).

O pacote tkfe inclui duas funções que tornam os widgets inacessíveis (all_disable) ou disponíveis (all_enable) em um determinado widget:

  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

No entanto, prefiro usar os recursos tk busy. Isso é claramente visto no exemplo:



Esta é uma teoria. Na prática, o pacote tkfe foi usado na estação de trabalho criptográfica com base nos padrões de chave pública cryptoarmpkcs . Agora, o uso do explorador de arquivos neste aplicativo para a plataforma Linux se parece com isso:



Mas o explorador, localizado no quadro:



e, claro, ficou muito conveniente trabalhar com o explorador na plataforma Android:



alguém pode perguntar: E o Windows ou OS X? Sim, está tudo ótimo. Mas como sempre no Windows - esse é o problema da russificação; no nosso caso, é o uso do alfabeto cirílico na nomeação de arquivos e pastas, bem como o uso de uma barra invertida. Portanto, as seguintes linhas devem ser adicionadas ao código:

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

É assim que o tkfe explorer se parece na plataforma Windows:



O próprio pacote e exemplos de seu uso estão aqui .

All Articles