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 .