0

各単語に個別のタグがある 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',

そして、このようなものではありません: 「百年戦争」、それが想定されているように、タグが単語に割り当てられていないことは言うまでもありません.

これを行う正しい方法があるかどうかを誰かが知っていますか?それとも、それだけ多くの単語にタグを割り当てることができないという単純なケースですか?

編集:少し明確化

4

1 に答える 1

2

Python関数の引数の数は255に制限されているようです(ここを参照)-どうやらGuidoは、それよりも多くの引数を持つ関数を(明示的に)呼び出すのは誤りだと考えています(この点で彼に同意すると思います;) 。この制限を回避する最も簡単な方法は、「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()
于 2012-06-13T20:10:19.410 に答える