Python:将标签分配给Tkinter中的文本

时间:2012-06-13 19:26:28

标签: python tags tkinter

我想在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',

并不是这样的:'百年战争',就像它应该的那样,并且不用说标签没有分配给单词。

有没有人知道是否有正确的方法可以做到这一点,还是只是你无法为那么多单词分配标签?

编辑:澄清了一点

1 个答案:

答案 0 :(得分:2)

似乎python函数的参数数量限制为255(参见here) - 显然Guido认为错误地(明确地)调用具有更多参数的函数(我想我同意他的观点;)。解决此限制的最简单方法是使用" splat"或"拆包"操作

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()