我希望只获得具有“正常状态”的项目,我追踪不同状态(隐藏和正常)的不同行, 其实我用的是:
foreach itemId [.c find all]
...
我试过这样但是它不起作用
set state [.c itemcget $tag state]
set state [$itemId cget state]
谢谢
答案 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
用于获取画布的状态,而不是画布中的项目。