【问题标题】:Tkinter Find and Replace Function for Notepad记事本的 Tkinter 查找和替换功能
【发布时间】:2015-09-23 18:55:55
【问题描述】:

我是 Tkinter 和 python 的新手。我一直在尝试自己制作的记事本脚本。我正在处理查找/替换命令。但我没有运气。到目前为止,这是我尝试过的:

def replace():
    def replaceall():
        findtext = str(find.get(1.0, END))
        replacetext = str(replace.get(1.0, END))
        alltext = str(text.get(1.0, END))
        alltext1 = all.replace(findtext, replacetext)
        text.delete(1.0, END)
        text.insert('1.0', alltext1)
    replacebox =Tk()
    replacebox.geometry("230x150")
    replacebox.title("Replace..")
    find = Text(replacebox, height=2, width=20).pack()
    replace = Text(replacebox, height=2, width=20).pack()
    replaceallbutton = Button(replacebox, text="Replace..", command=replaceall)
    replaceallbutton.pack()

(这只是我为替换命令定义的函数)

“文本”变量位于包含菜单和主要文本小部件的大画布上。

感谢任何帮助 到目前为止,我一直在 2.7.8 中创建这个记事本,所以 Tkinter 导入是“Tkinter”。

我的目标是让第一个框有要查找的文本,而第二个框有要替换的文本。按下替换按钮后,函数 replaceall() 应该开始了。

我的功能是否有任何明显的错误,或者只是存在严重缺陷?任何帮助表示赞赏。

【问题讨论】:

    标签: python python-2.7 tkinter


    【解决方案1】:

    最明显的错误是您正在创建Tk 的第二个实例。如果你需要一个弹出窗口,你应该创建一个Toplevel 的实例。您应该始终只运行一个 Tk 实例。

    第二个问题与您使用Text 小部件进行查找和替换输入的事实有关。当您使用第二个索引END 进行获取时,无论用户是否输入了一个,您返回的字符串将始终有一个换行符。如果您只想要用户输入的内容,请使用“end-1c”(结尾减去一个字符)。

    最后,没有理由获取所有文本,替换字符串,然后重新插入所有文本。只要您在文本小部件中没有格式化或嵌入小部件或图像,这将起作用。文本小部件有一个search 命令可以搜索模式(字符串或正则表达式),您可以使用返回的信息将找到的文本替换为替换文本。

    【讨论】:

    • 优秀的反馈。您是否有一个脚本可以推荐作为 tkinter 文本小部件中逐字(自动完成)或逐段替换的模板?
    猜你喜欢
    • 2019-02-04
    • 2013-11-23
    • 2013-08-20
    • 2017-12-07
    • 2014-07-18
    • 2016-12-10
    • 2019-02-15
    • 2022-06-15
    相关资源
    最近更新 更多