Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Canvas 为什么在签入是否存在canva对象(Tcl/Tk 8.5)时info exists总是返回0_Canvas_Tcl_Tk - Fatal编程技术网

Canvas 为什么在签入是否存在canva对象(Tcl/Tk 8.5)时info exists总是返回0

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

我尝试了以下测试,请参见下面的代码片段:

它总是返回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 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