[python-win32] Webbrowser control and Tab Navigation

Mike Driscoll mdriscoll at co.marshall.ia.us
Tue Jun 10 15:27:14 CEST 2008


Christof Ecker wrote:
> Hi all,
>
> I am using the webbrowser control (internet explorer) as display
> component in a project. Unfortunately the Tab and Enter keys do not
> work, i.e. it is impossible to switch between input fields of the
> displayed html-page and it is impossible to enter a newline in an
> input field.
>
> The shortened listing is below.
>
> Can anyone help?
>
> Christof
>
>
> # file htmlwidget.py
> import wx
>
> from wx.lib.activexwrapper import MakeActiveXClass
> import win32com.client.gencache
> browserModule = win32com.client.gencache.EnsureModule(
>     "{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}", 0, 1, 1)
>
>
> # Flags to be used with the RefreshPage method
> REFRESH_NORMAL = 0
> REFRESH_IFEXPIRED = 1
> REFRESH_CONTINUE = 2
> REFRESH_COMPLETELY = 3
>
>
> # Flags to be used with LoadUrl, Navigate, Navigate2 methods
> NAV_OpenInNewWindow = 0x1
> NAV_NoHistory = 0x2
> NAV_NoReadFromCache = 0x4
> NAV_NoWriteToCache = 0x8
> NAV_AllowAutosearch = 0x10
> NAV_BrowserBar = 0x20
> NAV_Hyperlink = 0x40
>
>
> class HtmlView(wx.Panel):
>     url = None
>
>     _needs_update = False
>     def __init__(self, parent):
>         wx.Panel.__init__(
>             self, parent, -1,
>             style=wx.TAB_TRAVERSAL|wx.CLIP_CHILDREN|wx.NO_FULL_REPAINT_ON_RESIZE
>             )
>         ##
>         # Make a new class that derives from the WebBrowser class in the
>         # COM module imported above.  This class also derives from wxWindow and
>         # implements the machinery needed to integrate the two worlds.
>         theClass = MakeActiveXClass(browserModule.WebBrowser, eventObj=self)
>
>         # Create an instance of that class
>         self.ie = theClass(self, -1)
>
>         sizer = wx.BoxSizer(wx.VERTICAL)
>         sizer.Add(self.ie, 1, wx.EXPAND)
>         self.SetSizer(sizer)
>         self.ie.offline = False
>
>
>     def SetChanged(self):
>         self._needs_update = True
>         if self.IsShownOnScreen():
>             wx.CallAfter(self.update)
>
>     def Navigate2(self, url):
>         self.ie.Navigate2(url,
> Flags=NAV_NoReadFromCache|NAV_NoWriteToCache|NAV_NoHistory)
>
>
> if __name__ == '__main__':
>     app = wx.PySimpleApp()
>     frame = wx.Frame(None, -1)
>     sizer = wx.BoxSizer(wx.VERTICAL)
>     win1 = HtmlView(frame)
>     win1.Navigate2("http://www.google.com")
>     sizer.Add(win1, 1, wx.EXPAND)
>     win1.Show()
>
>     import wx.py.shell
>     win = wx.py.shell.Shell(frame, -1)
>     sizer.Add(win, 1, wx.EXPAND)
>     frame.SetSizer(sizer)
>     frame.Show(True)
>
>     app.MainLoop()
>
>   

You might want to re-post this to the wxPython user's group just in case 
you're missing a wx method. I use wxPython extensively, but I'm not 
familiar with that particular widget. The link to the mail list is below:

http://wxpython.org/maillist.php

Also, there's the PAMIE project which you may or may not find useful: 
http://pamie.sourceforge.net/

I personally have used the SendKeys module to automate IE, however it's 
rather like black magic and kind of sucks: 
http://www.rutherfurd.net/python/sendkeys/

-------------------
Mike Driscoll

Blog:   http:\\blog.pythonlibrary.org
Python Extension Building Network:     http:\\www.pythonlibrary.org




More information about the python-win32 mailing list