[英]Tkinter text widget replace
除了 tkinter 中的replace()
方法之外,還有什么方法可以替換特定的東西,例如:“你好”,如果我想用“a”替換“h”,它將是->“aello”,問題是tkinter 中的replace()
方法是它只替換Text()
小部件的一系列文本。
換句話說,我可以通過給出要替換的字符而不是要替換的字符的索引來替換字符串嗎? 例如,我想做諸如entry.replace("hello", "goodbye")
類的entry.replace("hello", "goodbye")
來自動查找“hello”的索引並將這些字符替換為“goodbye”。
我的類似方法是擴展小部件。 下面是使用 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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.