2012-07-19 3 views
4

기본 UI를 작성하는 Python 스크립트의 ttk.Treeview 인스턴스에 항목을 추가하려고합니다. 삽입 코드는 다음과 같습니다ttk.Treeview에 항목을 추가 할 때 '일치하지 않는 열린 중괄호'오류가 발생했습니다.

_tkinter : 나는 '텍스트'라는 이름의 열에서 문자열 todo_text를 설정할 때 특정 문자열을 발견 한 경우, Tkinter에 오류가 발생 것을 찾는거야

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']) 

. TclError : 목록에서 일치하지 않는 열린 중괄호

그리고 내가 생각할 수있는 유일한 이유는 문제의 문자열에 중괄호가 포함되어 있다는 것입니다.

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

이 내가 todo_text 또는 str(todo_text)를 사용하는지 여부에 일어날 것 : 여기가 부러 문자열입니다.

텍스트 문자열이 인데 어떻게 든 파헤 치다? 내가 뭘 놓치고 있니?

+0

로 파이썬 버그 추적기에보고되었습니다. 다른 텍스트 문자열을 사용해 보셨습니까? 나는 그 때 작동 할 가장 간단한 원본 끈을 결정하는 것을 시도 할 것이다, 실패 할 때까지 다른 특성을 추가하십시오. – gary

+0

다른 여러 문자열이 있습니다. 내가 발견 한 유일한 차이점은 이것에 '{'이 있다는 것입니다 ... – scorpiodawg

+3

이것은 어둠 속에서 완전한 찔림이지만'str ​​(todo_text) .replace ('{', r '\ { ')'? – mgilson

답변

3

핵심은 Tkinter가 Tcl 인터프리터를 둘러싼 래퍼입니다. Tcl의 경우 중괄호는 이스케이프하지 않는 한 특별합니다. 중괄호는 Tcl 목록을 만드는 가장 일반적인 방법입니다. unmatched open brace in list이 표시되면 언밸런스 괄호가있는 것과 관련된 Tcl 오류입니다.

Tkinter 래퍼가 Tcl 인터프리터로 전달하기 전에 데이터를 잘못 인용하고 있습니다. 중괄호 앞에 역 슬래시를 추가하면 이제는 유효한 Tcl 문자열이되므로 더 이상 오류가 표시되지 않습니다. 오류 목록을 의미하기 때문에

이것은 아마도 그것은 * 텍스트를 구문 분석 *이며, 문제 #15861

2

Tkinter는 중괄호를 인용 부호로 사용하는 Tcl 위에 있습니다.

Tkinter는 Tcl의 중괄호를 사용하여 문자열을 인용하지만 문자열 자체에있는 문자는 이스케이프 처리하지 않는 것처럼 보입니다.

관련 문제