擅长:python、mysql、java
<p>问题的根本原因是文本尚未在屏幕上绘制,因此调用<code>dlineinfo</code>将不会返回任何有用的内容。在</p>
<p>如果在绘制行号之前添加对<code>self.update()</code><em>的调用,那么代码的工作效果会更好一些。它不会完美地工作,因为你还有其他缺陷。更好的是,当GUI空闲时,或者在可见性事件或类似事件上调用函数。一个好的经验法则是永远不要打电话给<code>update</code>,除非你明白为什么不应该打电话给<code>update()</code>。然而,在这种情况下,它是相对无害的。在</p>
<p>另一个问题是,您一直在向i追加内容,但在写入画布时总是使用<code>i[0]</code>。当您到达第2行时,<code>i</code>将是“1.0+1line”。第三行是“1.0+1line+1line”,以此类推。第一个字符总是“1”。在</p>
<p>您应该做的是要求tkinter将修改后的i转换为规范索引,并将其用于行号。例如:</p>
<pre><code>i = self.__text.index('{0}+1line'.format(i))
</code></pre>
<p>这将把“1.0+1line”转换为“2.0”,“2.0+1line”转换为“3.0”,依此类推。在</p>