2012-06-13 8 views
0

Tkinter의 텍스트 위젯에 텍스트를 추가하고 싶습니다. 각 단어에는 별도의 태그가 있습니다. 짧은 예 :Python : Tkinter의 텍스트에 태그 할당

text.insert('end', 
    'Hello, ', 'TAG1', 
    'how ', 'TAG2', 
    'are you.', 'TAG3',) 

이 출력 제공 : "안녕하세요, 당신을 얼마나을"

이 잘 작동하지만 내 문제는 내가 여러 단락에 걸쳐 텍스트와 함께이 작업을 수행 할 수 있다는 것입니다. 텍스트 파일을 편집하는 스크립트를 사용하여 위의 예제와 같은 방법으로 모든 단어 뒤에 태그가 오는 방법을 시도했습니다. 하지만,

There's an error in your program: 
*** more than 255 arguments(scriptname.py, line 77) 

없음 추적 : 나는 스크립트에 텍스트를 붙여 넣으면

는하지만,이 오류가 발생합니다.

이 방법은 원하는 출력 중 하나를 제공하지 않습니다 스크립트가 실제로 실행 위의 방법으로

infile = open('filepath').read() 
text.insert('end', infile) 

을하지만, 텍스트 위젯의 텍스트는 다음과 같이 밝혀 :

'The ', 'TAG1', 
'Hundred ', 'TAG2', 
'Years', 'TAG3', 
'War ', 'TAG4', 

그리고 '백 년간의 전쟁'은 말처럼 태그가 단어에 할당되어 있지 않다고 말하면서도 마찬가지입니다.

올바른 방법이 있는지 아는 사람이 있습니까? 아니면 그 많은 단어에 태그를 할당 할 수없는 경우입니까?

편집 : 명확히 조금

+0

전체 오류 메시지를 게시 할 수 있습니까? – mgilson

+0

가됩니다. 감사. – Yngve

+0

모든 단어에 태그를 추가하는 것은 매우 드문 경우입니다. 당신은 정말로 어떤 문제를 해결하려고합니까? 각 단어마다 고유 한 태그가 있어야합니까? –

답변

2

파이썬 함수에 인수의 수 (here 참조) 255로 제한됩니다 보인다 - 분명히 귀도가가 오류라고 생각 (명시 적)보다 더 많은 인수 함수를 호출 그 (나는이 시점에서 나는 그와 동의한다고 생각한다). 이 제한을 극복하는 가장 쉬운 방법은 "splat"또는 "unpacking"연산자를 사용하는 것입니다.

import Tkinter as tk 

words="""this is a really large file, it has a lot of words"""*25 

args=['end'] 
for i,w in enumerate(words.split()): 
    args.extend((w+' ','TAG%d'%i)) 


root=tk.Tk() 
text=tk.Text(root) 
text.grid(row=0,column=0) 
text.insert(*args) 
root.mainloop() 
+0

매력처럼 작동했습니다. 고맙습니다! – Yngve

+1

@Yngve - 문제 없습니다. 나는 파이썬이 인수의 한계가 255인지 알지 못했다. 오늘 나 한테 가르쳐 줘서 고마워. – mgilson

+0

와우, 나는 실제로 누군가에게 뭔가 가르쳤다. 우연히도, 그것은 나를 위해 가장 먼저, 롤. – Yngve