【问题标题】:How to bind cefpython browser object to BoxSizer in wxpython?如何将cefpython浏览器对象绑定到wxpython中的BoxSizer?
【发布时间】:2018-04-03 05:55:25
【问题描述】:

我使用 wxpython 创建了自定义最大化框架。在面板顶部,自定义关闭按钮和底部 cefpython 浏览器需要包含。为了分离,我使用了 BoxSizer。 CreateBrowserSync 正在返回浏览器对象,因此,我收到错误消息。

错误:

[CEF Python] ExceptHook: catched exception, will shutdown CEF

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/wx/core.py", line 2116, in Notify
    self.notify()
  File "/usr/local/lib/python2.7/dist-packages/wx/core.py", line 3245, in Notify
    self.result = self.callable(*self.args, **self.kwargs)
  File "wxpython.py", line 162, in embed_browser
    self.sizer.Add(self.browser, 1, wx.EXPAND)
TypeError: Sizer.Add(): arguments did not match any overloaded call:
  overload 1: argument 1 has unexpected type 'cefpython_py27.PyBrowser'
  overload 2: argument 1 has unexpected type 'cefpython_py27.PyBrowser'
  overload 3: argument 1 has unexpected type 'cefpython_py27.PyBrowser'
  overload 4: argument 1 has unexpected type 'cefpython_py27.PyBrowser'
  overload 5: argument 1 has unexpected type 'cefpython_py27.PyBrowser'
  overload 6: argument 1 has unexpected type 'cefpython_py27.PyBrowser'
  overload 7: argument 1 has unexpected type 'cefpython_py27.PyBrowser'
  overload 8: argument 1 has unexpected type 'cefpython_py27.PyBrowser'
  overload 9: argument 1 has unexpected type 'cefpython_py27.PyBrowser'

代码

  window_info = cef.WindowInfo()
        (width, height) = self.browser_panel.GetClientSize().Get()
        assert self.browser_panel.GetHandle(), "Window handle not available yet"
        window_info.SetAsChild(self.browser_panel.GetHandle(),
                               [1, 1, width, height])

        self.browser = cef.CreateBrowserSync(window_info,
                                             url="https://www.google.com/")

self.sizer = wx.BoxSizer(wx.VERTICAL) 
    closeBtn = wx.Button(self, label="X", size=(30, 30))
    closeBtn.Bind(wx.EVT_BUTTON, self.onClose)
    vbox = wx.BoxSizer(wx.VERTICAL)
    hbox= wx.BoxSizer(wx.HORIZONTAL)
    hbox.Add(closeBtn, 0, flag=wx.ALIGN_RIGHT | wx.ALL)
    vbox.Add(hbox, 0, flag=wx.ALIGN_RIGHT | wx.ALL)
    self.SetSizer(vbox)
    vbox.SetSizeHints(self)
    self.sizer.Add(closeBtn, 0, wx.ALIGN_RIGHT | wx.ALL)
    sizer.Add(self.browser, 1, wx.EXPAND)
    self.SetSizer(sizer)

如何在 wxpython 中将 cefpython 浏览器对象绑定到 BoxSizer。如果有其他替代解决方案,请告诉我。

【问题讨论】:

    标签: wxpython cefpython


    【解决方案1】:

    self.browser 变量包含一个 Python 对象,但BoxSizer.Add 方法需要一个小部件(面板、窗口等)作为第一个参数。

    改变这一行:

    sizer.Add(self.browser, 1, wx.EXPAND)
    

    到这里:

    sizer.Add(self.browser_panel, 1, wx.EXPAND)
    

    【讨论】:

    • 这个问题是否相关 cefpython [0404/151627.124604:ERROR:interface_registry.cc(203)] Failed to locate a binder for interface: blink::mojom::SensitiveInputVisibilityService requested by: content_renderer exposed by: content_browser via InterfaceProviderSpec "navigation:frame".
    • 你可以试试谷歌,这是一个不同的问题:google.com/…
    猜你喜欢
    • 1970-01-01
    • 2014-05-14
    • 2021-06-14
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 2014-12-31
    • 2023-04-01
    相关资源
    最近更新 更多