我正在使用tkinter作为数据结构类,我想将文本小部件作为项目的一部分。教授问我使用的是什么结构,我意识到我不知道tkinter是如何围绕文本小部件构建容器的。
我在源代码中翻了一番,在__init__.py
中有以下部分:
class Text(Widget, XView, YView):
"""Text widget which can display text in various forms."""
def __init__(self, master=None, cnf={}, **kw):
"""Construct a text widget with the parent MASTER."""
""" snipped stuff """
def get(self, index1, index2=None):
"""Return the text from INDEX1 to INDEX2 (not included)."""
return self.tk.call(self._w, 'get', index1, index2)
我以为如果我能够深入研究代码,我就能弄清楚引擎盖下运行的是什么,但我遇到了一个障碍。我不明白为什么所有的函数都在运行self.tk.call(self._w,'whatst',…(。
为什么它调用另一个函数";呼叫";其中"是";呼叫";?
简而言之,我很想知道get是从哪里调用的,这样我就可以弄清楚文本使用的是什么样的容器,但现在我也很感兴趣为什么会有一大堆对这个"的调用;呼叫";函数也包含在所有源代码中。不仅仅是文本小部件可以做到这一点。我不知道在哪里"呼叫";正在进行。感谢在这条道路上的任何指示或指导。
总结评论,以备将来使用:
@jasonharper指出:
Tkinter的NONE实际上是在Python中实现的——实际的GUI(Tk(是用Tcl编程语言实现的。Tkinter嵌入Tcl解释器,可从任何小部件中以tk的形式获得;.call((方法将命令行提交给该解释器,该解释器基本上是唯一的任何与GUI相关的事情实际发生的方式。
OP,用指定了他的问题
我使用容器来表示包含文本的数据结构在小部件中。无论该成员是什么数据类型。某种链接列表,或者一棵树,或者其他什么。
文档说明:
文本在内部用修改后的B-树结构表示即使使用大型文本,操作也相对高效。标签为以允许标签跨越的方式包含在B-树结构中大范围或具有许多不相交的较小范围而不损失效率标记的实现方式也允许标记的数量。在大多数情况下,拥有大量唯一标签或具有许多不同范围的标签。
实际的B-Tree源代码在github上进行进一步检查