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
,因为这是将在下一次搜索中使用的变量。
我之前发布过关于此的帖子,并且我已经能够将程序缩减为一个函数以用于测试目的。我没有收到任何错误,但我遇到了一个让我难以自拔的错误。我可以替换快捷方式,但它只会替换快捷方式的第一个字母。
代码如下:
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
,因为这是将在下一次搜索中使用的变量。