在UliPad中,如果你使用的是Windows的平台,那么在浏览HTML时可以使用ie内核打开。而且UliPad还支持将reStructuredText进行HTML预览的处理。但是在我安装了2.8.9.1之后,程序就报错了,错误是说ie对象找不到EVT_DocumentComplete属性。很奇怪,看了一下iewin.py发现我以前用的2.8.7.1和新的2.8.9.1版本不一样了,少了事件的定义。
虽然以前就知道ActiveX框架换了,但是的确没有考虑过。结果造成UliPad与新版本的wxPython的不兼容。所以在网上查了一下,参考了2.8.9.1中的demo示例,大概是这个样子的:
1. 不再使用Bind的方式对事件进行绑定了,而是通过直接定义事件处理函数。但这个函数不能随便定义,具体的可以查阅
MSDN上的文档得知需要定义哪些事件处理函数。同时要注意在wxPython中还要定义一个this参数,比如原EVT_DocumentComplete事件对应的定义为:
def DocumentComplete(self, this, pDisp, URL):
第一个是self,第二个是this
2. 在创建iewin对象之后,要调用:
ie.AddEventSink(self)
具体这个有什么用,我没有仔細研究,不过猜测就是可以自动将事件与方法绑定吧。
ActiveX的新的封装是从2.8.8.0版本开始的,所以为了保持兼容,你可以做一个判断,如:
if wx.Platform == '__WXMSW__':
import wx.lib.iewin as iewin
...
if wx.version() < '2.8.8.0':
self.ie.Bind(iewin.EVT_DocumentComplete, self.OnDocumentComplete, self.ie)
else:
self.ie.AddEventSink(self)