首页 > 解决方案 > 在 Kivy 屏幕中嵌入 cefpython

问题描述

我正在构建一个带有 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 或任何其他嵌入式浏览器的工作示例吗?

标签: kivykivy-languagecefpython

解决方案


我可以通过使用来自 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 ...


推荐阅读