【问题标题】:Embedding cefpython inside Kivy screen在 Kivy 屏幕中嵌入 cefpython
【发布时间】:2020-09-05 16:30:24
【问题描述】:

我正在构建一个带有 2 个屏幕的简单 Kivy 应用程序。第一个屏幕有一个简单的按钮,点击后会转到第二个屏幕,并应在嵌入式浏览器中打开特定网站(例如 google.com)。我知道 Kivy 本身并不支持嵌入式浏览器,所以我使用了 cefpython。顺便说一句,我正在为应用程序使用 Python 3 和 Kivy 1.11.1。

https://github.com/cztomczak/cefpython

简单的 hello-world 示例使用 cefpython3 并且似乎运行良好。

https://github.com/cztomczak/cefpython/blob/master/docs/Tutorial.md#hello-world

问题是这段代码在 Kivy 应用程序上打开了一个新的应用程序窗口并暂停执行,直到浏览器窗口关闭。我想要实现的是在 Kivy 应用屏幕中打开 url。

所以,我遇到了这个在 Kivy 中嵌入 cefpython 的示例:

https://github.com/cztomczak/cefpython/blob/master/src/linux/binaries_64bit/kivy_.py

但似乎这个示例需要 Python 3 不支持的 pygtk2。因此,我无法让它工作。此外,对于尝试打开 URL 之类的简单活动,该代码看起来有点矫枉过正。

有人可以指导我如何在 Kivy 中嵌入 cefpython 或任何其他嵌入式浏览器的工作示例吗?

【问题讨论】:

    标签: kivy kivy-language cefpython


    【解决方案1】:

    我可以通过使用来获得基本的和错误的功能 来自 deadsnake 的 Ubuntu 20.04、Python 3.7 我安装了 Kivy 2 并 pip install Cefpython3==66.0 然后我 git clone 这个存储库https://github.com/allestuetsmerweh/garden.cefpython

    然后我按照建议创建了一个符号链接:

    ln -s path/to/this/garden.cefpython ~/.kivy/garden/garden.cefpython

    您必须从 garden.cefpython 进入源文件 cefbrowser.py 并更改一些内容,主要是设置为 none 但 nonevalue 未检查的命名参数或传递给函数但函数不检查的命名参数不要声明它。

    毕竟,一些示例似乎有点作用,但内容安全策略存在很多问题。我仍在处理 controls.py 示例以尝试更改 url...

    【讨论】:

    • 谢谢。我认为 Kivy 2.0+ 引入了异步请求,这可能是一种值得探索的方法。
    • 嗨,我最终使用了 async kivy + async Playwright。我仍然可以完全控制浏览器,但缺点是我有两个窗口,一个用于我的应用程序,一个用于浏览器,但现在很好的是没有崩溃,没有错误消息,没有补丁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多