将项目添加到ttk.Treeview时出现“无法比较的开括号”错误

时间:2012-07-19 17:36:03

标签: python treeview tkinter

我正在尝试在我的Python脚本中为ttk.Treeview实例添加一个项目,以构建基本UI。插入代码如下所示:

tree.insert(my_id, 
            'end', 
            todo_id, 
            text="Line " + str(line_num), 
            values=(str(todo_text), owner), # I have 2 cols, 'text' and 'owner'
            tags=['#todo_entry'])

我发现在名为“text”的列中设置字符串todo_text时,Tkinter在遇到特定字符串时会抛出错误:

_tkinter.TclError:列表中无法匹配的大括号

并且我唯一可以想到的原因是,所讨论的字符串包含一个大括号。这是它打破的字符串:

'// static class Properties { // TODO, temp class'

无论我是否使用todo_textstr(todo_text)

,似乎都会发生这种情况

文本字符串是否以某种方式解析?我错过了什么?

2 个答案:

答案 0 :(得分:3)

在它的核心,Tkinter是Tcl解释器的包装器。对于Tcl,花括号是特殊的,除非它们被转义。大括号是创建Tcl列表的最常用方法。如果你看到unmatched open brace in list,这是一个与你有不平衡大括号有关的Tcl错误。

这看起来像是一个Tkinter错误 - tkinter包装器在将数据传递给Tcl解释器之前错误地引用了数据。当你在花括号前面放一个反斜杠时,现在它变成了一个有效的Tcl字符串,这就是你不再看到错误的原因。

这已在python错误跟踪器上报告为问题#15861

答案 1 :(得分:2)

Tkinter位于Tcl之上,它使用大括号作为一种引用。

看起来Tkinter引用了带有大括号的字符串,但没有转义任何碰巧出现在字符串本身的字符串。