2017-06-05 51 views
0

我無法在treectrl中遞歸添加節點。即我想要在瀏覽器中顯示所有的目錄和文件。如何在tcl tk中顯示目錄結構(資源管理器)?

直到現在,這就是我所擁有的。我在當前每個文件夾中添加虛擬節點。

package require treectrl 
treectrl .t -showheader 0 -selectmode single -showroot 0 -yscrollcommand {.y set} 
scrollbar .y -ori vert -command ".t yview" 
pack .y -side right -fill y 
pack .t -side right -fill both -expand 1 
set columnID [.t column create -text "Column 0"] 
.t configure -treecolumn $columnID 
.t element create el1 text 
.t element create el2 rect -showfocus yes 
.t style create s1 
.t style elements s1 [list el1 el2] 
.t style layout s1 el2 -union el1 
.t configure -defaultstyle s1 

proc add_node {parent text} { 
    set itemID [.t item create -button yes ] 
    .t item element configure $itemID 0 el1 -text $text 
    .t item collapse $itemID 
    .t item lastchild $parent $itemID 
    return $itemID  
} 

set images [glob -nocomplain -directory "D:/Explore" "*"] 
for {set i 0} {$i<=[llength $images]} {incr i} { 
    set root [lsearch $images [lindex $images $i]] 
    add_node [add_node [add_node root [list directory [file tail [lindex $images $i]]]] dummy] dummy2 
} 
+0

你可能想仔細閱讀本曾在https://wiki.tcl.tk/15091靈感 –

回答

0

首先,你需要使用glob命令的選項-tipes。這樣你可以分開目錄和文件。其次,您需要遞歸來處理嵌套的文件和目錄。

package require Tk 
package require treectrl 
treectrl .t -showheader 0 -selectmode single -showroot 0 -yscrollcommand {.y set} 
scrollbar .y -ori vert -command ".t yview" 
pack .y -side right -fill y 
pack .t -side right -fill both -expand 1 
set columnID [.t column create -text "Column 0"] 
.t configure -treecolumn $columnID 
.t element create el1 text 
.t element create el2 rect -showfocus yes 
.t style create s1 
.t style elements s1 [list el1 el2] 
.t style layout s1 el2 -union el1 
.t configure -defaultstyle s1 

proc add_node {parent text button} { 
    set itemID [.t item create -button $button ] 
    .t item element configure $itemID 0 el1 -text $text 
    .t item collapse $itemID 
    .t item lastchild $parent $itemID 
    return $itemID 
} 

proc add_directory {path parent} { 
    set directory_list [glob -nocomplain -types d -directory $path "*"] 
    foreach directory $directory_list { 
    set n [add_node $parent [file tail $directory] yes] 
    add_directory $directory $n 
    } 
    set files_list [glob -nocomplain -types f -directory $path "*"] 
    foreach file $files_list { 
    set n [add_node $parent [file tail $file] no] 
    } 
} 

add_directory "D:/Explore" root 
+0

列出的項目。謝謝。 –

相關問題