我正在尝试创建一个文本编辑器来处理一个类似字符串的对象。理想情况下,我希望将Tkinter的文本小部件或其他Gui模块子类化,以允许我替换此自定义对象,而不是使用字符串。你知道吗
我了解如何创建对象本身(基本上只是用元数据标记每个单词),但不了解如何将呈现的对象作为文本进行操作,同时保留其其他属性。你知道吗
例如
文本编辑器导入一个包含“Hello World”的文件。在打开这篇文章时,两个词都用相关属性标记。(以下显示为字典,但理想情况下为对象)您好。strContent, 你好。索引等)
Hello={strContent: "Hello", index: 0, speaker: "Joe", paragraph: 3}
World={strContent: "World", index: 1, speaker: "Joe", paragraph: 3}
现在我完全搞不懂如何在文本gui中使这些类似字符串的对象可操作,并进行剪切、复制、粘贴、删除和重新排列。我不需要让程序允许我键入任何新词或创建新对象,只要在转换打开的文件时操作已初始化的对象即可。你知道吗
任何帮助或指导都将不胜感激。谢谢。你知道吗
注意:这试图回答被问到的问题,但我怀疑这是一个xy problem。在这个答案的最后,我将给出一些其他的建议。你知道吗
文本小部件不能有一些复杂的对象作为其底层数据结构。它可以显示文本,并且可以有与文本相关联的标记。您也可以插入图像和小部件,但我认为这与您的要求无关。你知道吗
在中读取数据时,可以为每段元数据构造标记,并将这些标记与一系列文本相关联。例如,单词“Hello”可能有标签“第3段", "演讲者:乔,和索引:0". "世界“将是相似的,除了它会有标签”索引:1". 你知道吗
这在最初显示数据时很容易做到。例如:
如果你在单词“World”中插入“r”,它将继承周围文本的标签。你知道吗
您可以使用
dump
方法从小部件中获取数据,该方法返回一个数据流。例如,self.text.dump("1.0", "end-1c", tag=True, text=True, mark=False)
产生以下信息:将数据重新组装回原始格式是一件棘手的事情。这是一个粗略的尝试,虽然我不知道它如何站起来在现实世界中。用户可能会以完全破坏结构的方式编辑数据。你知道吗
由于不知道您实际要完成什么,文本小部件可能不是最佳解决方案,因为它给了用户太多修改文本的自由。例如,如果他们将“Hello”改为“HelloWorld”,然后删除原来的“World”,会发生什么?他们最终会得到一个“HelloWorld”项目,还是原来的两个“Hello”和“World”项目?你知道吗
您可能需要考虑使用画布,其中每个文本项都是一个不同的对象(也可以有标记),或者您可能需要使用一系列条目小部件,以便一次中的数据不会流入另一次中。你知道吗
我想你可以做一些像
然后,无论何时需要显示该文本,都可以让它像这样循环
然后printableStr将是一个很好的字符串,包含来自hello的所有信息
相关问题 更多 >
编程相关推荐