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 回答