wxpython - 创建一个 wx.html.HtmlWindow() 突出显示的文本

wxpython - create a wx.html.HtmlWindow() that has highlighted text

使用 wxpython 4.1.0,Windows 10 x64,Python 3.7.7 x64...

我想要实现的是非常基本的,但无法通过阅读 wxpython 文档和搜索互联网来弄清楚。

我使用 python 的原生 difflib 模块创建了 HTML 差异报告。如果您使用任何流行的浏览器 Chrome、Firefox、Edge 等打开此 html 差异报告,您会得到很好的突出显示,以区分所发现的差异。

当我使用 wxpythons wx.html.HtmlWindow() 小部件打开同一个文件时,没有显示漂亮的视觉效果。不会显示清楚显示差异的突出显示,而只会显示文本,几乎不可能找到差异。

wxpython 在功能方面非常完整,我假设有一种方法可以使用 wx.html.HtmlWindow() 小部件或 [=36 中的类似小部件来实现此目的=] API。我在想实现这一目标的唯一方法可能是使用 wx.html2 API.

用于查看我的问题的最少代码量(为简单起见不包括在 类 中):

DIFFLIB代码:

import difflib
import pathlib as path


file1 = path.Path('text_file1.txt')
file2 = path.Path('text_file2.txt')

with file1.open() as file_obj1:
    contents1 = file_obj1.readlines()

with file2.open() as file_obj2:
    contents2 = file_obj2.readlines()

html = difflib.HtmlDiff().make_file(contents1, contents2, file1.name, file2.name)

with open('report.html', 'w') as file_obj:
    file_obj.write(html)

界面代码:

import wx
import wx.html    
        
def html_window():
    frame = wx.Frame(parent=None)
    html = wx.html.HtmlWindow(frame)
    html.LoadFile('report.html')
    frame.Show()

    
app = wx.App(False)
html_window()
app.MainLoop()

你的问题是wx.html不支持css。
wx.html2 可以,但即使那样也可能与内联 css 有冲突,这就是 report.html 文件中的内容。
不过,您始终可以尝试 wx.html2.
除此之外,为什么不使用 wx.LaunchDefaultBrowser("path_to_file/report.html")

想到的另一个选择是使用:

difflib.HtmlDiff().make_table(contents1, contents2, file1.name, file2.name)

然后添加您自己的 css。