Perl Tk Canvas - 是否可以在标签表达式中转义字符?

问题描述

我有一个 Tk 画布,我用它来显示继电器电路。作为更新画布的一部分,我使用 itemcget()获取画布中某些对象的当前状态。例如:

$CW->itemcget("COIL$name",'-fill')

问题是在显示某些电路时,出现以下错误并且画布停止更新:

=== 20092 === Tk::Error: Invalid boolean operator in tag search expression at C:\StrawBerry\perl\site\lib/Tk.pm line 251.

违规标签类似于“COIL[!AB*CD[F]]Zyx123”。 Tk 解释“!”作为逻辑非,这使得它成为一个无效的表达式。删除“!” from $name in the itemcget() 调用停止错误,但有一个明显的缺点,它不能再找到正确的标签。我找不到任何记录的方法来转义标记表达式中的字符,所以我尝试在“!”之前添加一个反斜杠,但没有用。也没有添加第二个“!”。

有什么办法可以摆脱“!”在标签表达式中,还是我必须重新编写代码,以便标签名称永远不会包含这些字符?

编辑:我最终选择了第三个选项。我编写了一个函数,在 Canvas 中的每个对象中搜索具有匹配标签的对象,绕过了标签表达式问题。

sub canvas_tag_search
{
    my ($CW,$search_tag) = @_;
    
    foreach my $object ($CW->find('all'))
    {
        foreach my $tag ($CW->gettags($object))
        {
            if ($tag eq $search_tag)
            {
                return $object;
            }
        }
    }
    
    return undef;  # No match found
}

这个解决方案没有解决我最初的问题,但它可以满足我的目的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)