1

我们在使用 wxPython 加载文件时遇到问题,用例是我们在计算机上的文件夹中有这些文件/片段。snips 是原始 html 文件的一小部分 - 很多时候,snips 是一个提取的表格,表格周围有 html 和 body 标签

<html><body><table>
    ~tr and td tags with stuff in them
</table></body><<html>

用户使用 SmartBrowser(我们的应用程序)导航到文件夹,然后列出文件夹中的 htm 和 txt 文件并显示第一个。我们有控制在列表中移动(下一个和上一个)

几年来,该系统运行良好,几乎没有故障。突然之间,SmartBrowser(允许查看片段的应用程序的名称)在加载某些片段时开始崩溃。我终于隔离了问题以确定崩溃正在发生

  1. 如果文件有表标签
  2. 如果表中的任何 td 元素具有宽度属性 (WIDTH=)

如果我只是将宽度属性更改为一些无意义的词(比如香蕉),那么一切都会正常显示并且程序不会崩溃,但是如果存在宽度属性,那么在运行以尝试调试的命令控制台中会显示以下错误消息

你好狼

Traceback (most recent call last):
  File "gui\smart_browser.pyo", line 286, in onOpen
  File "gui\smart_browser.pyo", line 219, in browseTo
  File "gui\smart_browser.pyo", line 170, in update
  File "gui\smart_browser.pyo", line 231, in loadUrl
  File "wx\html.pyo", line 1008, in LoadPage
wx._core.PyAssertionError: C++ assertion "(size_t)(n) <= length()" failed at ..\
..\include\wx/string.h(433) in wxStringBase::at(): invalid index in wxString

让我再次强调一下——这种行为最近才出现——我们已经迁移到 WxPython 2.9 但回滚到 2.8 以查看是否是原因,但我们没有看到任何行为差异。

于是我在wx\html.py的错误信息中找到了函数

def LoadPage(*args, **kwargs):
   """LoadPage(self, String location) -->bool"""
    return _html.HTMLWindow_LoadPage(*args, **kwargs)

但是我看到该程序是从 _html 导入的,请原谅我,但现在看起来我像_html一个pyd文件一样进入了我的脑海 - 这似乎是一种dll??

我不确定下一步该怎么做,因为我不知道为什么 WIDTH 属性会导致我在WxWidgets网站上四处寻找错误,而且我似乎找不到任何证据表明这种组合会成为问题。我不确定接下来应该看什么。

具体来说,我正在寻找关于我需要阅读什么来解决这个问题的建议,也许是我们应该在外面处理这个问题的迹象,Wx或者Wx对我有技能的人来说似乎很可怕。

好吧,我将根据 Mike Driscoll 的回答添加更多代码确实有这个

try:
    from wx.lib.iewin import IEHtmlWindow as HtmlWindow
    LOAD_URL_FUNC_NAME = 'LoadUrl'
    GET_URL_PROPERTY_NAME = "locationurl"
except:
    from wx.html import HtmlWindow
    LOAD_URL_FUNC_NAME = 'LoadPage'
    GET_URL_PROPERTY_NAME = "OpenedPage"

他是完全正确的,我注释掉了条件导入,经过更多研究确定我需要

from wx.lib.iewin_old import IEHtmlWindow as HtmlWindow

请注意iewin_old我假设我们正在使用 IEHtmlWindow 但我们不是因为在我去iewin_old时解决的导入错误

4

1 回答 1

1

我无法从您显示的一小段代码中确定,但我猜您正在使用 HTMLWindow。HTMLWindow 小部件只适用于一组有限的 HTML 标记,所以我猜它对该属性不满意。我怀疑你基本上有两种选择:

  • 在使用 wxPython 使用 lxml 或 beautifulsoup 之类的东西打开它之前,去掉有问题的元素
  • 使用更强大的 HTML 小部件,例如 wx.html2 中的 webview

您还可以在 wxPython Google 组/用户列表中询问其他建议。

于 2013-11-12T20:14:16.583 回答