4

我正在尝试将一个项目添加到ttk.Treeview我的 Python 脚本中的一个实例,该脚本构建一个基本的 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'])

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

_tkinter.TclError:列表中不匹配的左大括号

我能想到的唯一原因是,有问题的字符串包含一个花括号。这是它打破的字符串:

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

todo_text无论我是否使用或,这似乎都会发生str(todo_text)

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

4

2 回答 2

3

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

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

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

于 2012-07-19T19:25:27.010 回答
2

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

看起来 Tkinter 用大括号为 Tcl 引用字符串,但没有转义字符串本身中的任何内容。

于 2012-07-19T19:24:44.547 回答