# Slightly more advanced sample illustrating the usage of CEFWindow class.# On Mac the cefpython library must be imported the very first,# before any other libraries (Issue 155).import cefpython3.wx.chromectrl as chrome# TODO: There is something wrong happening on Linux. CPU usage# for the python process is 100% all the time. This problem# does not occur on Windows, nor in sample1.py/sample3.py.# It must have something to do with invalid usage of the wx# controls in this example.import wximport wx.lib.agw.flatnotebook as fnbimport platformimport sysROOT_NAME = "My Locations"URLS = ["http://gmail.com","http://maps.google.com","http://youtube.com","http://yahoo.com","http://wikipedia.com","http://cyaninc.com","http://tavmjong.free.fr/INKSCAPE/MANUAL/web/svg_tests.php"]class MainFrame(wx.Frame):def __init__(self):wx.Frame.__init__(self, parent=None, id=wx.ID_ANY,title='cefwx example2', size=(800, 600))self.initComponents()self.layoutComponents()self.initEventHandlers()if len(sys.argv) == 2 and sys.argv[1] == "test-launch":wx.CallLater(500, self.testLaunch)def testLaunch(self):# This hash is checked by /tests/test-launch.sh script# to detect whether CEF initialized successfully.print("b8ba7d9945c22425328df2e21fbb64cd")self.Close()def initComponents(self):self.tree = wx.TreeCtrl(self, id=-1, size=(200, -1))self.root = self.tree.AddRoot(ROOT_NAME)for url in URLS:self.tree.AppendItem(self.root, url)self.tree.Expand(self.root)self.tabs = fnb.FlatNotebook(self, wx.ID_ANY,agwStyle=fnb.FNB_NODRAG | fnb.FNB_X_ON_TAB)# You also have to set the wx.WANTS_CHARS style for# all parent panels/controls, if it's deeply embedded.self.tabs.SetWindowStyleFlag(wx.WANTS_CHARS)def layoutComponents(self):sizer = wx.BoxSizer(wx.HORIZONTAL)sizer.Add(self.tree, 0, wx.EXPAND)sizer.Add(self.tabs, 1, wx.EXPAND)self.SetSizer(sizer)def initEventHandlers(self):self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, self.tree)self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CLOSING, self.OnPageClosing)self.Bind(wx.EVT_CLOSE, self.OnClose)def OnSelChanged(self, event):self.item = event.GetItem()url = self.tree.GetItemText(self.item)if url and url != ROOT_NAME:cefPanel = chrome.ChromeCtrl(self.tabs, useTimer=True, url=str(url))self.tabs.AddPage(cefPanel, url)self.tabs.SetSelection(self.tabs.GetPageCount()-1)event.Skip()def OnPageClosing(self, event):print("sample2.py: One could place some extra closing stuff here")event.Skip()def OnClose(self, event):# Remember to destroy all CEF browser references before calling# Destroy(), so that browser closes cleanly. In this specific# example there are no references kept, but keep this in mind# for the future.self.Destroy()# On Mac the code after app.MainLoop() never executes, so# need to call CEF shutdown here.if platform.system() == "Darwin":chrome.Shutdown()wx.GetApp().Exit()class MyApp(wx.App):def OnInit(self):frame = MainFrame()self.SetTopWindow(frame)frame.Show()return Trueif __name__ == '__main__':chrome.Initialize()if platform.system() == "Linux":# CEF initialization fails intermittently on Linux during# launch of a subprocess (Issue 131). The solution is# to offload cpu for half a second after Initialize# has returned (it still runs some stuff in its thread).import timetime.sleep(0.5)print('sample2.py: wx.version=%s' % wx.version())app = MyApp(False)app.MainLoop()# Important: do the wx cleanup before calling Shutdowndel app# On Mac Shutdown is called in OnCloseif platform.system() in ["Linux", "Windows"]:chrome.Shutdown()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。