问题描述
我有一个 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 (将#修改为@)