如何在画布中获取状态项

时间:2015-07-21 14:04:18

标签: canvas tcl

我希望只获得具有“正常状态”的项目,我追踪不同状态(隐藏和正常)的不同行, 其实我用的是:

foreach itemId [.c find all]
...

我试过这样但是它不起作用

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

谢谢

1 个答案:

答案 0 :(得分: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
    }
}

如果您想让if条件更短,请使用$state in {"" "normal"}

注意:pathName cget state用于获取画布的状态,而不是画布中的项目。