File 构建用于文件搜索的tk窗口应用程序

File 构建用于文件搜索的tk窗口应用程序,file,recursion,tcl,tk,proc,File,Recursion,Tcl,Tk,Proc,嗨,我正在构建一个窗口工具,其中将有一个目录模式条目和一个返回条目,用于给出特定模式的文件数,并计算我将得到返回条目中文件数的按钮点击 代码是: package require Tk wm title . "Validating number of files" grid [ttk::frame .c -padding "3 3 12 12"] -column 0 -row 0 -sticky nwes grid

嗨,我正在构建一个窗口工具,其中将有一个目录模式条目和一个返回条目,用于给出特定模式的文件数,并计算我将得到返回条目中文件数的按钮点击

代码是:

          package require Tk

          wm title . "Validating number of files"
          grid [ttk::frame .c -padding "3 3 12 12"] -column 0 -row 0 -sticky nwes
          grid columnconfigure . 0 -weight 1; grid rowconfigure . 0 -weight 1

          #takes the input value for directory_Pattern
          grid [ttk::entry .c.directory_Pattern -width 20 -textvariable directory_Pattern] -column 2 -row 1 -sticky we
          grid [ttk::entry .c.numberOfFiles -width 20 -textvariable numberOfFiles] -column 2 -row 2 -sticky we
          grid [ttk::button .c.glob-r -text "Calculate" -command glob-r] -column 3 -row 3 -sticky w

          grid [ttk::label .c.flbl -text "directory_Pattern"] -column 3 -row 1 -sticky w
          grid [ttk::label .c.islbl -text "is equivalent to"] -column 1 -row 2 -sticky e
          grid [ttk::label .c.mlbl -text "numberOfFiles"] -column 3 -row 2 -sticky w

          foreach w [winfo children .c] {grid configure $w -padx 5 -pady 5}
          focus .c.directory_Pattern

          bind . <Return> {glob-r}

          proc glob-r {{dir .} args} {
          if {[catch {
             set res {}
             foreach i [lsort [glob -nocomplain -dir $dir *]] {
             if {[file isdirectory $i]} {
                    eval [list lappend res] [eval [linsert $args 0 glob-r $i]]
             } else {
                    if {[llength $args]} {
                       foreach arg $args {
                       if {[string match $arg $i]} {
                          lappend res $i
                          break
                       }
                    }
                    } else {
                           lappend res $i
                      }
                   }
           }
         return $res
         set ::numberOfFiles [$res]
         }]!=""} {
         set ::numberOfFiles "no files are there"
         }
         }
包需要Tk
wm标题。“正在验证文件数”
网格[ttk::frame.c-填充“3 3 12”]-列0-行0-粘性nwes
网格列配置。0-权重1;网格行配置。0-重量1
#获取目录\u模式的输入值
网格[ttk::entry.c.directory\u Pattern-宽度20-文本变量目录\u Pattern]-第2列-第1行-粘滞we
网格[ttk::entry.c.numberOfFiles-宽度20-文本变量numberOfFiles]-第2列-第2行-粘滞
网格[ttk::button.c.glob-r-文本“计算”-命令glob-r]-第3列-第3行-粘性w
网格[ttk::label.c.flbl-文本“目录模式”]-第3列-第1行-粘性w
grid[ttk::label.c.islbl-text”相当于“]-第1列-第2行-第e行
网格[ttk::label.c.mlbl-文本“numberOfFiles”]-第3列-第2行-粘性w
foreach w[winfo children.c]{grid configure$w-padx 5-pady 5}
focus.c.directory\u模式
绑定{glob-r}
proc glob-r{{dir.}args}{
如果{[catch]{
集合res{}
foreach i[lsort[glob-nocomplain-dir$dir*]]{
如果{[file isdirectory$i]}{
eval[列出待决事项][eval[linsert$args 0 glob-r$i]]
}否则{
如果{[llength$args]}{
foreach arg$args{
如果{[字符串匹配$arg$i]}{
lappend res$i
打破
}
}
}否则{
lappend res$i
}
}
}
返回$res
set::numberOfFiles[$res]
}]!=""} {
set::numberOfFiles“没有文件”
}
}
但当我在目录模式中输入“E:*.tcl”时,单击“计算”按钮,我在numberOfFiles中得到“没有文件”。
有人能帮忙吗?

当您第一次调用时,您需要将
目录模式
传递给
glob-r
过程-目前它没有任何用处

grid [ttk::button .c.glob-r -text "Calculate" -command {glob-r $directory_Pattern}] -column 3 -row 3 -sticky w

对于这个问题的任何回复都可能遗漏了一些东西,但我看不出您在哪里使用
目录\u模式
…@captain:多亏了我的理解,我已经给出了重点。然而,该代码对银行的船长不起作用。你破译了它,这只是我的问题。再次感谢。它解决了此脚本的许多问题。突出的一点是,如果在
catch
脚本中调用
return
,则
catch
命令将始终返回2(并且
return
的结果参数将存储在
catch
的第二个参数中命名的变量中(此处不提供该变量)。感谢您突出显示,但在更改后,我仍无法获得所需的输出