wxPython官方文档中文翻译 - HTML概述

130 阅读8分钟

官方文档:docs.wxpython.org/html_overvi…

wx.html库提供了用于解析和显示HTML的类。

它并非旨在成为一款高端的 HTML 浏览器。如果你在寻找那样的浏览器,可以尝试访问 www.mozilla.org/

wxhtml可用作通用的富文本查看器,例如用于显示精美的 “关于” 对话框(就像那些 GNOME 应用程序的 “关于” 对话框一样),或者用于显示数据库搜索的结果。有一个wx.FileSystem类,它允许你使用自己的虚拟文件系统。

HtmlWindow支持标签处理程序。这意味着你可以轻松地使用新的、库原本不支持的标签来扩展html库。不仅如此,你甚至可以使用自己特定于应用程序的标签!

还有一个独立于HtmlWindow的通用HtmlParser类。

HTML起步

展示HTML

HtmlWindow(派生自wx.ScrolledWindow)用于显示HTML文档。

它有两个重要的方法:LoadPage和SetPage。LoadPage方法用于加载并显示HTML文件,而SetPage方法则直接显示传入的字符串。示例如下:

mywin.LoadPage("test.htm")
mywin.SetPage("htmlbody" \
              "h1Error/h1" \
              "Some error occurred :-H)" \
              "/body/hmtl")

设置HtmlWindow

由于HtmlWindow是从wx.ScrolledWindow派生而来,而非从wx.Frame派生,所以它没有可见的窗口。但用户通常希望在某个地方看到所显示的HTML页面的标题,而框架的标题栏就是显示标题的理想位置。

为了处理这一情况,HtmlWindow提供了两种方法:SetRelatedFrameSetRelatedStatusBar。示例如下:

html = wx.html.HtmlWindow(self)
html.SetRelatedFrame(self, "HTML : %%s")
html.SetRelatedStatusBar(0)

第一条命令将HTML对象与其窗口关联起来(此处的self指向wx.Frame对象),并设置标题的格式。在这个示例中,页面标题 “Hello, world!” 将显示为 “HTML : Hello, world!”。

第二条命令设置应该使用哪个窗口的状态栏来显示浏览器的消息(例如 “正在加载…” 或 “已完成” 或超文本链接)。

自定义HtmlWindow

你可以通过设置字体大小、字体类型以及边框(窗口边框与所显示的HTML内容之间的空白区域)来自定义 HtmlWindow。相关函数如下:

最后两个函数用于存储用户自定义信息,也就是wx.ConfigBase相关的内容(例如在Windows系统下存储在注册表中,在Unix系统下存储在点文件中)。

HTML打印

wx.html库提供了具有不同复杂程度的打印功能。打印HTML文档最简单的方法是使用HtmlEasyPrinting类。

它只需一条命令就能让你打印HTML文档,而且你完全不必担心从wx.Printout类派生的问题。它只是 HtmlPrintout(常规的wxPython打印类)的一个简单包装器。

最后还有一个底层类HtmlDCRenderer,你可以使用它将HTML渲染到任何设备上下文(DC)的矩形区域中。

它支持将内容渲染到具有相同宽度的多个矩形区域中。(这种方式最常见的用途是在每一页上放置一个矩形区域,或者打印成两列。 )

帮助文件格式

wx.html库可用于向用户展示帮助手册;实际上,它原生支持(通过HtmlHelpController)微软HTML制作工具格式的一个简化版本。

一本(帮助)手册由三个文件组成:头文件、目录文件和索引文件。

你可以将这些文件,再加上HTML文件以及任意图像文件,制作成一个常规的压缩归档文件,以便HTML(或帮助查看器)读取;并且这个 “.zip” 文件可以视情况重命名为 “.htb” 文件。

头文件(.hhp)

头文件必须包含以下这些行(并且可能包含一些会被忽略的额外行):

Contents file=filename.hhc
Index file=filename.hhk
Title=title of your book
Default topic=default page to be displayed.htm

所有文件名(包括默认主题)都相对于 “.hhp” 文件的位置。

注意:此外,对于本地化,“.hhp” 文件可能包含以下这一行内容: Charset=rfc_charset这一行指定了在目录文件和索引文件中所使用的字符集(例如 “iso8859_1”)。请注意,这一行与微软HTML帮助制作工具不兼容,该工具要么会在无提示的情况下删除这一行,要么就会报错。

目录文件(.hhc)

目录文件采用HTML语法,并且可以由常规的HTML解析器进行解析。它恰好包含一个列表(<ul> … </ul> 语句):

<ul>

  <li><object type="text/sitemap">
    <param name="Name" value="@topic name@">
    <param name="ID" value=@numeric_id@>
    <param name="Local" value="@filename.htm@">
  </object></li>
  <li><object type="text/sitemap">
    <param name="Name" value="@topic name@">
    <param name="ID" value=@numeric_id@>
    <param name="Local" value="@filename.htm@">
  </object></li>
</ul>

你可以修改标签的值属性。主题名称是在目录中显示的章节/主题名称,filename.htm是HTML页面的名称(相对于 “.hhp” 文件),而numeric_id是可选的——仅在使用Display时才会用到它。

列表中的项目可以是嵌套的——一个<li>语句可能包含一个<ul>子语句:

<ul>

    <li><object type="text/sitemap">
            <param name="Name" value="Top node">
            <param name="Local" value="top.htm">
        </object></li>
    <ul>
        <li><object type="text/sitemap">
            <param name="Name" value="subnode in
            topnode">
            <param name="Local" value="subnode1.htm">
            </object></li>

    </ul>

    <li><object type="text/sitemap">
            <param name="Name" value="Another Top">
            <param name="Local" value="top2.htm">
        </object></li>

</ul>

索引文件(.hhk)

索引文件的格式与目录文件相同,只是ID参数会被忽略,并且不允许有子列表。

输入过滤器

wx.html库提供了一种用于读取和显示多种不同文件格式的文件的机制。

LoadPage方法不仅可以加载HTML文件,还能加载任何已知格式的文件。要让HtmlWindow识别某种文件类型,你必须创建一个HtmlFilter过滤器,并使用AddFilter方法将其注册。

单元格与容器

本文介绍了HtmlWinParserHtmlWindow用于解析和显示HTML文档的机制。

单元格

你可以将任何文本(或HTML)分割成小的片段。我们把这些片段称为单元格。例如,一个单词、一条水平线、一张图片或者文档的任何其他部分都可以是一个单元格。每个单元格都有宽度和高度(特殊的零尺寸 “神奇” 单元格除外,比如颜色更改器或字体更改器)。详见HtmlCell

容器

容器是一种单元格,它可以包含子单元格。其大小取决于子单元格的数量和尺寸(同时也取决于窗口的宽度)。详见HtmlContainerCellLayout部分。这张图片展示了单元格和容器:

在标签处理器中使用容器

HtmlWinParser提供了一种便于用户管理容器的方式。它基于打开和关闭容器的理念。

使用OpenContainer可在已打开的容器内打开一个新容器。这个新容器是原容器的子容器。(如果你想创建一个与原容器处于同一深度层级的新容器,可以先调用CloseContainer(),然后再调用OpenContainer() 。)

使用CloseContainer来关闭容器。这并不会创建一个处于相同深度层级的新容器,而是将 “控制权” 交还给父容器。具体解释如下:

显然,OpenContainer的调用次数必须与CloseContainer的调用次数相同。

案例

这段代码创建了一个新的段落(与当前处于相同深度层级的容器),内容为 “Hello, world!” 。

myParser.CloseContainer()
c = myParser.OpenContainer()

myParser.AddText("Hello, ")
myParser.AddText("world!")

myParser.CloseContainer()
myParser.OpenContainer()

下面是这种情况的图示:

你可以看到,在执行这段代码之前有一个已打开的容器。我们关闭了它,创建了我们自己的容器,然后关闭了我们的容器,接着又打开了新的容器。

结果是,在执行完代码后,容器的深度层级保持不变。这是标签处理器应该遵循的一般规则:不改变容器的深度层级(换句话说,在HandleTag函数体中,对OpenContainer和CloseContainer的调用次数应该相同)。

注意:请注意,通常最好使用InsertCell方法,而不是直接向解析器添加文本。

标签处理器

wx.html库提供了可插拔标签处理器的架构。标签处理器是一种能够理解特定的一个或多个HTML标签,并对其进行解释的类。

HtmlWinParser有一个模块静态表。每个模块包含一个或多个标签处理器。每当创建一个新的HtmlWinParser对象时,所有模块都会被扫描,并且这些处理器会被添加到HtmlParser的可用处理器列表中。

工作原理

常见的标签处理器的HandleTag方法按以下四个步骤工作:

  • 将父解析器的状态保存到局部变量中。
  • 根据标签的参数更改解析器的状态。
  • 解析该标签与其配对的结束标签之间的文本(如果存在结束标签的话)。
  • 恢复解析器的原始状态。

有关修改解析器状态的方法,请参阅HtmlWinParser。一般来说,你可以进行诸如打开/关闭容器、更改颜色、字体等操作……

提供自定义的标签处理器

有关如何提供你自己的标签处理器,请参阅wx.lib.wxpTag

标签处理器

该处理器派生自HtmlWinTagHandler(或直接派生自HtmlTagHandler)。

html所支持的标签

wx.html并非HTML标准的完整实现。相反,它支持大多数常见的标签,因此可以使用它来显示简单的HTML文档。(例如,它可以很好地处理在网景网页编辑器(Netscape Composer)中创建的页面,或者由tex2rtf生成的页面)。

以下表格列出了wx.html所识别的所有标签,以及其支持的参数。

一个标签的一般形式为:标签名 参数_1 参数_2 … 参数_n,其中参数_i 要么是参数名="参数值" ,要么是参数名=参数值 ,这两种形式是等效的。除非另有说明,wx.html对大小写不敏感。

常见参数值表

我们将在标签描述中使用以下这些替代内容:

image.png

image.png

支持的标签列表

image.png

image.png

image.png

image.png

image.png

支持的样式列表

wx.html实际上并不支持CSS,但它确实支持一些简单的样式:你可以对所有元素使用 “text-align”、“width”、“vertical-align” 和 “background” 这些样式,并且对于SPAN元素,还额外支持其他一些样式:

  • color
  • font-family
  • font-size (仅以磅为单位)
  • font-style (仅支持这些值:“oblique”, “italic” and “normal”)
  • font-weight (仅支持这些值:“bold” and “normal”)
  • text-decoration (仅支持值:“underline”)