Python - .insert() 方法只替换单词的首字母?

Python - .insert() method only replaces the first letter of word?

我之前发布过关于此的帖子,并且我已经能够将程序缩减为一个函数以用于测试目的。我没有收到任何错误,但我遇到了一个让我难以自拔的错误。我可以替换快捷方式,但它只会替换快捷方式的第一个字母。

代码如下:

from tkinter import *

root = Tk()
text = Text(root)
text.pack(expand=1, fill=BOTH)

syntax = "shortcut = sc" # This will be turned into a function to return the shortcut
                         # and the word, I'm only doing this for debugging purposes.

def replace_shortcut(event=None):
    tokens = syntax.split()
    word = tokens[:1]
    shortcut = tokens[2:3]

    index = '1.0'
    while 1:
        index = text.search(shortcut, index, stopindex="end")
        if not index: break
        
        last_idx = '%s + %dc' % (index, len(shortcut))
        
        text.delete(index, last_idx)
        text.insert(index, word)
        
        last_idx = '%s + %dc' % (index, len(word))

text.bind('<space>', replace_shortcut)
text.mainloop()

给出的快捷方式,在我们的例子中,'sc' 将在键入 space 后变为 'shortcutc'。感谢您的帮助!

你有两个问题。

您将变量 shortcut 定义为 ['sc'] 而不是 'sc'。所以 len(shortcut) 永远是 1(数组的长度)而不是 2(字符串的长度)。您最终只会删除一个字符。可能你想要 len(shortcut[0])

[你和len(word)也有同样的问题。您将始终得到 1,即数组的长度。]

此外,您的 while 循环的最后一行应设置 index 而不是 last_idx,因为这是将在下一次搜索中使用的变量。