#!/usr/bin/env python import os import wx import wx.html2 as webview # WebView Backends backends = [ (webview.WebViewBackendEdge, 'WebViewBackendEdge'), (webview.WebViewBackendIE, 'WebViewBackendIE'), (webview.WebViewBackendWebKit, 'WebViewBackendWebKit'), (webview.WebViewBackendDefault, 'WebViewBackendDefault'), ] #---------------------------------------------------------------------- class TestPanel(wx.Panel): def __init__(self, parent, log, frame=None): self.log = log wx.Panel.__init__(self, parent, -1) self.current = "http://wxPython.org" self.frame = frame if frame: self.titleBase = frame.GetTitle() sizer = wx.BoxSizer(wx.VERTICAL) btnSizer = wx.BoxSizer(wx.HORIZONTAL) # The Internet Explorer emulation level is a persistent per-user and # per-application value. webview.WebView.MSWSetEmulationLevel(webview.WEBVIEWIE_EMU_IE11) # If you would like to reset it back to the default (no-emulation) then # it can be done by calling this: # webview.WebView.MSWSetEmulationLevel(webview.WEBVIEWIE_EMU_DEFAULT) # Find an available backend backend = None for id, name in backends: available = webview.WebView.IsBackendAvailable(id) log.write("Backend 'wx.html2.{}' availability: {}\n".format(name, available)) if available and backend is None: backend = id log.write("Using backend: '{}'\n".format(str(backend, 'ascii'))) # Create the WebView self.wv = webview.WebView.New(self, backend=backend) # Register a virtual FS handler for the "memory" scheme memory = wx.MemoryFSHandler() wx.FileSystem.AddHandler(memory) memory.AddFileWithMimeType('hello', 'Hello!', 'text/plain') self.wv.RegisterHandler(wx.html2.WebViewFSHandler('memory')) self.Bind(webview.EVT_WEBVIEW_NAVIGATING, self.OnWebViewNavigating, self.wv) self.Bind(webview.EVT_WEBVIEW_LOADED, self.OnWebViewLoaded, self.wv) btn = wx.Button(self, -1, "Open", style=wx.BU_EXACTFIT) self.Bind(wx.EVT_BUTTON, self.OnOpenButton, btn) btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) btn = wx.Button(self, -1, "<--", style=wx.BU_EXACTFIT) self.Bind(wx.EVT_BUTTON, self.OnPrevPageButton, btn) btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) self.Bind(wx.EVT_UPDATE_UI, self.OnCheckCanGoBack, btn) btn = wx.Button(self, -1, "-->", style=wx.BU_EXACTFIT) self.Bind(wx.EVT_BUTTON, self.OnNextPageButton, btn) btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) self.Bind(wx.EVT_UPDATE_UI, self.OnCheckCanGoForward, btn) btn = wx.Button(self, -1, "Stop", style=wx.BU_EXACTFIT) self.Bind(wx.EVT_BUTTON, self.OnStopButton, btn) btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) btn = wx.Button(self, -1, "Refresh", style=wx.BU_EXACTFIT) self.Bind(wx.EVT_BUTTON, self.OnRefreshPageButton, btn) btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) txt = wx.StaticText(self, -1, "Location:") btnSizer.Add(txt, 0, wx.CENTER|wx.ALL, 2) self.location = wx.ComboBox( self, -1, "", style=wx.CB_DROPDOWN|wx.TE_PROCESS_ENTER) self.location.AppendItems(['http://wxPython.org', 'http://wxwidgets.org', 'http://google.com', 'memory:hello']) self.Bind(wx.EVT_COMBOBOX, self.OnLocationSelect, self.location) self.location.Bind(wx.EVT_TEXT_ENTER, self.OnLocationEnter) btnSizer.Add(self.location, 1, wx.EXPAND|wx.ALL, 2) sizer.Add(btnSizer, 0, wx.EXPAND) sizer.Add(self.wv, 1, wx.EXPAND) self.SetSizer(sizer) self.wv.LoadURL(self.current) def ShutdownDemo(self): # put the frame title back if self.frame: self.frame.SetTitle(self.titleBase) # WebView events def OnWebViewNavigating(self, evt): # this event happens prior to trying to get a resource if evt.GetURL() == 'http://www.microsoft.com/': if wx.MessageBox("Are you sure you want to visit Microsoft?", style=wx.YES_NO|wx.ICON_QUESTION) == wx.NO: # This is how you can cancel loading a page. evt.Veto() def OnWebViewLoaded(self, evt): # The full document has loaded self.current = evt.GetURL() self.location.SetValue(self.current) # Control bar events def OnLocationSelect(self, evt): url = self.location.GetStringSelection() self.log.write('OnLocationSelect: %s\n' % url) self.wv.LoadURL(url) def OnLocationEnter(self, evt): url = self.location.GetValue() self.location.Append(url) self.wv.LoadURL(url) def OnOpenButton(self, event): dlg = wx.TextEntryDialog(self, "Open Location", "Enter a full URL or local path", self.current, wx.OK|wx.CANCEL) dlg.CentreOnParent() if dlg.ShowModal() == wx.ID_OK: self.current = dlg.GetValue() self.wv.LoadURL(self.current) dlg.Destroy() def OnPrevPageButton(self, event): self.wv.GoBack() def OnNextPageButton(self, event): self.wv.GoForward() def OnCheckCanGoBack(self, event): event.Enable(self.wv.CanGoBack()) def OnCheckCanGoForward(self, event): event.Enable(self.wv.CanGoForward()) def OnStopButton(self, evt): self.wv.Stop() def OnRefreshPageButton(self, evt): self.wv.Reload() #---------------------------------------------------------------------- def runTest(frame, nb, log): win = TestPanel(nb, log) return win #---------------------------------------------------------------------- overview = """

DemoName

Say something nice here """ if __name__ == '__main__': import sys,os import run run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])