2015-07-21 63 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