用python写一段代码,在windows上运行,使用tkinter,用于比较两段很长的文本content1和content2的差异,content1可加载指定路径的文件。程序能够在可视化界面上展示差异项,展示的窗口分为左界面和右界面,左右界面的滚动条能够同步滚动,左界面显示content1,右界面显示content2,左界面和右界面内容中,存在差异的部分,用颜色进行标记。
时间: 2024-03-13 22:46:00 浏览: 49
一个基于Python、tkinter构建的可视化目录文件同步助手,可以比较两个目录的结构不同,然后复制不同的数据进行同步
5星 · 资源好评率100%
好的,以下是符合您要求的代码:
```python
import tkinter as tk
import difflib
class TextDiffViewer:
def __init__(self, root):
self.root = root
self.root.title("Text Diff Viewer")
self.text1 = tk.Text(self.root, wrap="none")
self.text2 = tk.Text(self.root, wrap="none")
self.scrollbar1 = tk.Scrollbar(self.text1, command=self.text1.yview)
self.scrollbar2 = tk.Scrollbar(self.text2, command=self.text2.yview)
self.text1.config(yscrollcommand=self.scrollbar1.set)
self.text2.config(yscrollcommand=self.scrollbar2.set)
self.text1.pack(side="left", fill="both", expand=True)
self.text2.pack(side="right", fill="both", expand=True)
self.scrollbar1.pack(side="right", fill="y")
self.scrollbar2.pack(side="right", fill="y")
self.load_button = tk.Button(self.root, text="Load File", command=self.load_file)
self.load_button.pack(side="top")
def load_file(self):
file_path = tk.filedialog.askopenfilename()
if file_path:
with open(file_path, encoding="utf-8") as f:
content1 = f.read()
content2 = self.text2.get("1.0", "end-1c")
if content2:
d = difflib.Differ()
diff = d.compare(content1.splitlines(), content2.splitlines())
self.show_diff(diff)
else:
self.text1.delete("1.0", "end")
self.text1.insert("1.0", content1)
def show_diff(self, diff):
self.text1.delete("1.0", "end")
self.text2.delete("1.0", "end")
for line in diff:
if line.startswith("-"):
self.text1.insert("end", line[2:], "delete")
elif line.startswith("+"):
self.text2.insert("end", line[2:], "insert")
else:
self.text1.insert("end", line[2:])
self.text2.insert("end", line[2:])
self.text1.tag_config("delete", background="pink")
self.text2.tag_config("insert", background="lightgreen")
if __name__ == "__main__":
root = tk.Tk()
app = TextDiffViewer(root)
root.mainloop()
```
该程序会在窗口中展示两个文本框,分别用于显示content1和content2,左右两个文本框的滚动条能够同步滚动,当用户点击Load File按钮之后,程序会弹出文件选择框,用户可以选择一个文件,程序会将文件的内容读入到content1中,同时将content2中的内容与content1进行比较,将差异部分用颜色进行标记。
阅读全文