Tcl / Tk。适用于Linux和Android平台的替代文件浏览器

我在tcl / tk上编写各种程序的时间越长,我越会钦佩它的功能和体贴。但是直到最近,有一件事没有让我休息。开发GUI时,通常必须使用文件资源管理器(tk_getSaveFile,tk_getOpenFile或tk_chooseDirectory)。并且如果在Windows或OS X平台上加载了这些平台的本机文件浏览器,则在Linux平台上加载了来自tcl / tk的资源管理器(好吧,Linux中没有本机资源管理器):



在此资源管理器中,什么不适合您?缺少文件夹/文件的基本操作-创建,销毁,重命名。不,不要以为tcl本身就可以实现所有这些机制,当然它们根本不在Explorer GUI中。但是在Linux上,这并不是很明显。但是在Android平台上,来自Tcl / Tk的指挥者带来了许多不便:



当我们谈论Android平台时,我们指的是在Androwish上开发应用程序

然后这样的时候到了,自我隔离,等等。结果,诞生了一种Balalaika也称为package / tcl的包)tkfe(tk文件浏览器)。

在开发tkfe软件包时,我们不仅考虑到至少需要对文件/目录进行基本操作,而且还希望不仅在单独的窗口中而且在单独的框架中都有一个指南,用户自己可以将其放置在自己的GUI中。该项目有一个使用软件包的综合示例。因此,下载项目,转到〜// TkFileExplorer / samples文件夹并运行示例:

$wish tkfe_samplefull.tcl


实际上,该示例清楚地说明了程序包的所有功能。例如,运行资源管理器以在单独的窗口中选择一个文件夹:



资源管理器本身具有两种语言的界面:俄语和英语。单击带有标志的按钮时,将即时进行翻译:



除带有标志的按钮外,还有一个带有工具(工具)的按钮,单击后将显示上下文菜单,可以在当前目录(创建目录/文件)或选定的文件/文件夹(删除/重命名):



文件浏览器的任何功能都将返回变量的名称(带下划线的NAME)(请参见tkfe_samplefull.tcl示例),所选文件或目录的路径将写入该变量;如果拒绝选择,则该变量将为空。收到变量名称后,它将保留等待获得任何结果的时间,例如:

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

如果使用框架导体的放置类型,则需要注意其在图片中的放置。可以以任何方式放置(网格,包装或放置)。首选方法仍然是放置方法。您不必担心重新设置图像的格式,因为与网格和打包不同,放置位置可以将框架叠加在现有图像的顶部:



如果仔细查看图像,您会注意到右侧的屏幕截图与左侧的屏幕截图有所不同,其隐藏文件夹的外观(名称开头从这一点来看)。要显示隐藏的按钮,必须启用带有眼睛形图标的按钮。文件夹和文件也可以按字母顺序排序,文件按大小排序:



当将资源管理器放置在框架中时,您还应该注意阻止多余的按钮(将资源管理器放置在窗口中时,tkfe balalaika会处理此问题)。

tkfe软件包包括两个函数,这些函数使窗口小部件在给定窗口小部件内不可访问(all_disable)或可用(all_enable):

  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

但是,我更喜欢使用tk busy功能。在示例中可以清楚地看到



这一点这是一个理论。实际上,tkfe软件包用于基于cryptoarmpkcs公钥标准的加密工作站。现在,在Linux平台上的此应用程序中使用文件资源管理器看起来像这样:



但是资源管理器位于框架中:



并且,当然,在Android平台上使用资源管理器变得非常方便:



有人可能会问:Windows或OS X呢?是的,一切都很好。但是像在Windows上一样,这是Russification的问题,在我们的例子中,这是在文件和文件夹的命名中使用西里尔字母,以及使用反斜杠。因此,必须将以下行添加到代码中:

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

这是Windows平台上的tkfe Explorer的外观:



软件包本身及其使用示例在此处

All Articles