用python写一段代码,在windows上运行,使用tkinter,用于比较两段很长的文本content1和content2的差异,并在可视化界面上展示差异项的具体内容,最好能用颜色进行标记。
时间: 2024-03-13 11:45:30 浏览: 34
好的,我来给您编写这个程序。下面的代码会在Windows上使用Tkinter构建一个简单的GUI界面,用于比较两段长文本的差异,并且使用颜色进行标记。
```
import difflib
import tkinter as tk
class TextDiffViewer:
def __init__(self, master):
self.master = master
self.master.title("文本差异比较")
# 创建一个文本框用于输入内容1
self.textbox1 = tk.Text(self.master, height=20, width=50)
self.textbox1.grid(row=0, column=0, padx=10, pady=10)
# 创建一个文本框用于输入内容2
self.textbox2 = tk.Text(self.master, height=20, width=50)
self.textbox2.grid(row=0, column=1, padx=10, pady=10)
# 创建一个按钮用于比较两个文本的差异
self.compare_button = tk.Button(self.master, text="比较", command=self.compare_texts)
self.compare_button.grid(row=1, column=0, columnspan=2, padx=10, pady=10)
# 创建一个文本框用于显示差异
self.result_textbox = tk.Text(self.master, height=20, width=100)
self.result_textbox.grid(row=2, column=0, columnspan=2, padx=10, pady=10)
def compare_texts(self):
content1 = self.textbox1.get("1.0", "end-1c")
content2 = self.textbox2.get("1.0", "end-1c")
# 使用difflib库的SequenceMatcher类进行文本比较
matcher = difflib.SequenceMatcher(None, content1, content2)
diff = matcher.get_opcodes()
# 在结果文本框中显示差异
self.result_textbox.delete("1.0", "end")
for tag, i1, i2, j1, j2 in diff:
if tag == "replace":
# 如果是替换操作,将被替换的文本用红色标记,将替换后的文本用绿色标记
self.result_textbox.insert("end", content1[i1:i2], "delete")
self.result_textbox.insert("end", content2[j1:j2], "insert")
elif tag == "delete":
# 如果是删除操作,将被删除的文本用红色标记
self.result_textbox.insert("end", content1[i1:i2], "delete")
elif tag == "insert":
# 如果是插入操作,将插入的文本用绿色标记
self.result_textbox.insert("end", content2[j1:j2], "insert")
elif tag == "equal":
# 如果是相等操作,不进行标记
self.result_textbox.insert("end", content1[i1:i2])
# 设置标记样式
self.result_textbox.tag_config("delete", foreground="red")
self.result_textbox.tag_config("insert", foreground="green")
if __name__ == "__main__":
root = tk.Tk()
app = TextDiffViewer(root)
# 设置标记样式
app.result_textbox.tag_config("delete", foreground="red")
app.result_textbox.tag_config("insert", foreground="green")
root.mainloop()
```
运行程序后,您可以在左侧文本框输入content1,右侧文本框输入content2,然后点击“比较”按钮,即可在下方的结果文本框中看到差异信息。差异信息被标记为红色或绿色,分别表示被删除或被插入的文本。