Canvas 为什么在签入是否存在canva对象(Tcl/Tk 8.5)时info exists总是返回0
我尝试了以下测试,请参见下面的代码片段: 它总是返回0,而不管画布对象(在本例中为矩形)是使用create创建的还是使用delete删除的 是否有其他方法可以检查画布对象是否存在或是否已在Tcl/Tk中成功删除 谢谢 谢尔盖·胡恩Canvas 为什么在签入是否存在canva对象(Tcl/Tk 8.5)时info exists总是返回0,canvas,tcl,tk,Canvas,Tcl,Tk,我尝试了以下测试,请参见下面的代码片段: 它总是返回0,而不管画布对象(在本例中为矩形)是使用create创建的还是使用delete删除的 是否有其他方法可以检查画布对象是否存在或是否已在Tcl/Tk中成功删除 谢谢 谢尔盖·胡恩 ############ tk::canvas .can set r1 [.can create rect 30 10 120 80 -outline #fb0 -fill #fb0] set r2 [.can create rec
############
tk::canvas .can
set r1 [.can create rect 30 10 120 80 -outline #fb0 -fill #fb0]
set r2 [.can create rect 150 10 240 80 -outline #f50 -fill #f50]
set r3 [.can create rect 270 10 370 80 -outline #05f -fill #05f]
pack .can
##
##info exists does not work for canvas elements : it always returns 0
set rcc [info exists $r2]
puts "rcc = $rcc"
if {[info exists $r2]} {
puts "$r2 exists !"
.can delete $r2
puts [info exists $r2]
} else {
puts "$r2 does not exist !"
set rc [info exists $r2]
puts "rc = $rc "
}
##
##
wm title . "colors"
wm geometry . 400x100+300+300
##########
info exists用于检查变量是否存在。画布小部件不是变量,而是小部件
因此,您需要使用检查画布是否存在:
winfo exists .can
但再一次,在代码中用作r2的是画布中的一个项目,据我所知,没有命令检查它的存在。但是,您可以使用.can find all获得画布中所有项目的列表,并将其与r2进行比较:
然后,您可以执行类似lsearch-exact[.can find all]$r2的操作,如果您得到的不是-1,则知道此项存在
但是,如果对项目使用唯一标记,则可以使用.can find with tag验证其存在性:
% tk::canvas .can
% set r1 [.can create rect 30 10 120 80 -outline #fb0 -fill #fb0 -tags t1]
% set r2 [.can create rect 150 10 240 80 -outline #f50 -fill #f50 -tags t2]
% set r3 [.can create rect 270 10 370 80 -outline #05f -fill #05f -tags t3]
% .can find withtag t2
2 # which is equal to $r2
或者您可以只检查的长度。可以配置$r2的结果列表;如果$r2未引用任何项目,则该项目为空。@DonalFellows Nice,我没有想到这一点!太棒了,谢谢!因为它返回一个列表,所以命令是:if{[llength[.canItemConfigure$r2]]>0}{
% tk::canvas .can
% set r1 [.can create rect 30 10 120 80 -outline #fb0 -fill #fb0 -tags t1]
% set r2 [.can create rect 150 10 240 80 -outline #f50 -fill #f50 -tags t2]
% set r3 [.can create rect 270 10 370 80 -outline #05f -fill #05f -tags t3]
% .can find withtag t2
2 # which is equal to $r2