我试图用Tkinter在Python中创建一些文本编辑器,但我遇到了问题。
我一直试图为我的文本编辑器创建一个查找功能,但到目前为止还不顺利。
这就是我的主题。
def find(self):
target = askstring('Mainwindow','Search string')
if target:
where = self.aText.search(target,INSERT,END)
if where:
print(where)
pastit = where + ('+%dc' % len(target))
self.aText.tag_add(SEL, where, pastit)
self.aText.mark_set(INSERT, pastit)
self.aText.see(INSERT)
self.aText.focus()
当我运行它时会显示:
AttributeError:' _tkinter.tkapp'对象没有属性' aText'
我可以打开查找窗口,但它不会做我想要的,这当然是找到单词。
有什么想法吗?
答案 0 :(得分:0)
以下是此异常的MCVE,其中已注明解决方案。
import tkinter as tk
root = tk.Tk()
# root.aText = tk.Text(root)
print(root.aText)
这会产生
Traceback (most recent call last):
File "F:\Python\mypy\tem.py", line 3, in <module>
root.aText
File "C:\Programs\Python36\lib\tkinter\__init__.py", line 2095, in __getattr__
return getattr(self.tk, attr)
AttributeError: '_tkinter.tkapp' object has no attribute 'aText'
取消注释该行并获取(在即将发布的3.6.0b4中)
.!text
现在找到错字的位置,如果不是缺失的话。
注意:初学者的不断错误是在运行和测试之前键入太多代码。在我看来,在您知道if where:
代码有效之前,您不应该编写where =
代码。这假设失败发生在where =
语句中,而不是先前运行的代码中。
答案 1 :(得分:0)
def find():
word=find_input.get()
text_editor.tag_remove("match","1.0",tk.END)
matches=0
if word:
start_pos="1.0"
while True:
start_pos=text_editor.search(word,start_pos,stopindex=tk.END)
if not start_pos:
break
end_pos=f"{start_pos}+{len(word)}c"
text_editor.tag_add("match",start_pos,end_pos)
matches+=1
start_pos=end_pos
text_editor.tag_config("match",foreground="red",background="yellow")