Python(Tkinter) - 文本编辑器 - 查找功能

时间:2016-11-11 21:08:57

标签: python tkinter

我试图用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'

我可以打开查找窗口,但它不会做我想要的,这当然是找到单词。

有什么想法吗?

2 个答案:

答案 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")