【问题标题】:Tkinter text widget replaceTkinter 文本小部件替换
【发布时间】:2020-08-27 12:38:09
【问题描述】:

在 tkinter 中除了replace() 方法之外,是否还有其他方法可以替换特定的内容,例如: “你好”,如果我想用“a”替换“h”,它将是->“aello”,tkinter 中replace() 方法的问题是它只替换了Text() 的一系列文本小部件。

换句话说,我可以通过给出要替换的字符而不是要替换的字符的索引来替换字符串吗?例如,我想做entry.replace("hello", "goodbye") 之类的操作来自动查找“hello”的索引并将这些字符替换为“goodbye”。

【问题讨论】:

  • Entry.insert(0, Entry.get().replace("h","a")),Entry 是实例。

标签: python python-3.x tkinter


【解决方案1】:

我的方法是扩展小部件。下面是使用 2 个版本的 replace 扩展小部件的示例。普通版和regex 版。

import tkinter as tk, re
from typing import Pattern


class Text(tk.Text):
    @property 
    def text(self) -> str:
        return self.get('1.0', 'end')
        
    @text.setter
    def text(self, value:str):
        self.delete('1.0', 'end')
        self.insert('1.0', value)
        
    def __init__(self, master, **kwargs):
        tk.Text.__init__(self, master, **kwargs)
        
    def replace(self, find:str, sub:str):
        self.text = self.text.replace(find, sub)
        
    def reg_replace(self, find:Pattern, sub:str):
        self.text = find.sub(sub, self.text)
        

class Main(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        
        self.grid_rowconfigure(0, weight=1)
        self.grid_columnconfigure(0, weight=1)
        
        textfield = Text(self)
        textfield.grid(row=0, column=0, sticky='nswe', columnspan=2)
        
        re_find = re.compile('hello', re.I)
        find    = "Hello"
        sub     = "Goodbye"
        
        tk.Button(self, text='replace', command=lambda: textfield.replace(find, sub)).grid(row=1, column=0, sticky='e')
        tk.Button(self, text='regex replace', command=lambda: textfield.reg_replace(re_find, sub)).grid(row=1, column=1, sticky='e')
        

if __name__ == "__main__":
    root = Main()
    root.geometry('800x600')
    root.title("Text Replace Example")
    root.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 2012-02-14
    • 2019-06-14
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多