4

ttk.Treeview基本的なUIを構築するPythonスクリプトのインスタンスにアイテムを追加しようとしています。挿入コードは次のようになります。

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 に答える