2015-07-21 47 views
0

我期待得到的只是有一個「正常國家」的項目國家項目,我跟蹤與不同狀態不同​​的線路(隱藏和正常), 其實我用:如何獲得在畫布

foreach itemId [.c find all] 
... 

我想這樣的,但它一點兒也不工作

set state [.c itemcget $tag state] 
set state [$itemId cget state] 

謝謝

回答

0

一個項目在一個畫布可以有三種差別的狀態,即正常,禁用或隱藏。這是真的,除了沒有指定狀態的情況下創建的項目的狀態,就是說這個項目沒有任何狀態。

如果創建一個狀態正常的項目,你會怎麼做:

.c create item -state normal 

比方說,這個項目有ID 1.做.c itemcget 1 -state會給你normal

如果沒有指定國家創造另一個項目...

.c create item 

,並假定它具有ID 2,然後做.c itemcget 1 -state會給你一個空字符串。

基本上,正常和'沒有'是相同的。您可以查看特定項目的所有選項有:

.c itemconfigure tagOrId 

而對於第1項的情況下,你會發現,你有-state {} {} {} {normal}和項目2,你會-state {} {} {} {}

總之,要獲得與正常狀態下的所有項目ID的列表,你可以這樣做:

set normalItems [list] 
foreach itemId [.c find all] { 
    set state [.c itemcget $itemId -state] 
    if {$state eq "" || $state eq "normal"} { 
     lappend normalItems $itemId 
    } 
} 

或者使用$state in {"" "normal"}如果你想如果條件更短。

注意:pathName cget state用於獲取畫布的狀態,而不是畫布中的項目。

+0

你好,謝謝你的解釋。 – Nirvan