The Text
widget dump
方法返回元组列表。每个元组的形式为 (key, value, index). key将是以下之一:text
, mark
, tagon
, tagoff
, image
, or window
. value将依赖于密钥。index是文本中的位置。例如,与tagon
and tagoff
该值将是标签的名称。为了text
它是一串文本字符。
考虑一个文本小部件,其标签“bold”表示粗体,“italic”表示斜体。它可能看起来像这样:
当您致电dump
方法你会得到类似下面的内容(为了清楚起见添加了换行符):
[('text', 'Here is a sentence with ', '1.0'),
('tagon', 'bold', '1.24'),
('text', 'bolded', '1.24'),
('tagoff', 'bold', '1.30'),
('text', ' and ', '1.30'),
('tagon', 'italic', '1.35'),
('text', 'italicized', '1.35'),
('tagoff', 'italic', '1.45'),
('text', ' text.', '1.45')]
转换函数需要循环该数据并处理每个键。例如,对于每个tagon
您可以将标签添加到列表中,并且对于每个tagoff
您可以将其从列表中删除。为了text
标签,您只需插入带有当前标签列表的文本。
解决方案可能如下所示:
def undump(dump_data, target):
tags = []
for (key, value, index) in dump_data:
if key == "tagon":
tags.append(value)
elif key == "tagoff":
tags.remove(value)
elif key == "mark":
target.mark_set(value, index)
elif key == "text":
target.insert(index, value, tags)
给定一个名为source
和第二个文本小部件名为target
,你可以这样称呼它:
undump(source.dump("1.0", "end-1c"), target)