如何在 canvas 中获取状态项

How to get state item in canvas

我只想获得具有 'normal state' 的项目,我跟踪了具有不同状态(隐藏和正常)的不同线, 实际上我使用:

foreach itemId [.c find all]
...

我这样试过,但没用

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

谢谢

canvas中的项目可以有三种不同的状态,即正常、禁用或隐藏。这是真的,除了在没有指定状态的情况下创建的项目的状态,在这个意义上这个项目没有任何状态。

如果你创建一个状态正常的项目,你会做:

.c create item -state normal

假设此项目的 ID 为 1。执行 .c itemcget 1 -state 会得到 normal

如果您在没有指定状态的情况下创建另一个项目...

.c create item

假设它的 ID 为 2,那么 .c itemcget 1 -state 将得到一个空字符串。

本质上,normal和'nothing'是一样的。您可以通过以下方式查看特定项目的所有选项:

.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用于获取canvas的状态,而不是canvas中的项目。