将 CEFPython 并入 Mac 上的 Kivy 应用程序——键盘输入不起作用

Posted

技术标签:

【中文标题】将 CEFPython 并入 Mac 上的 Kivy 应用程序——键盘输入不起作用【英文标题】:Incorporating CEFPython into Kivy App on Mac -- keyboard input doesn't work 【发布时间】:2015-09-28 07:59:36 【问题描述】:

我正在尝试在 OSX 上运行位于 here 的简单 Kivy 应用程序。

起初,CEF 在初始化期间失败。输出是:

igskcicgltgm047:Kivy_Test dslosky$ kivy cefTest4.py 
[INFO   ] [Logger      ] Record log in /Applications/Kivy.app/Contents/Resources/.kivy/logs/kivy_15-07-09_18.txt
[INFO   ] [Kivy        ] v1.9.0
[INFO   ] [Python      ] v2.7.6 (default, Sep  9 2014, 15:04:36) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)]
[INFO   ] [Factory     ] 173 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_imageio, img_dds, img_gif, img_sdl2 (img_pil, img_ffpyplayer ignored)
[INFO   ] [OSC         ] using <multiprocessing> for socket
[INFO   ] [Window      ] Provider: sdl2
[INFO   ] [GL          ] OpenGL version <2.1 NVIDIA-10.2.1 310.41.15f01>
[INFO   ] [GL          ] OpenGL vendor <NVIDIA Corporation>
[INFO   ] [GL          ] OpenGL renderer <NVIDIA GeForce GT 750M OpenGL Engine>
[INFO   ] [GL          ] OpenGL parsed version: 2, 1
[INFO   ] [GL          ] Shading version <1.20>
[INFO   ] [GL          ] Texture max size <16384>
[INFO   ] [GL          ] Texture max units <16>
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [Text        ] Provider: sdl2
[INFO   ] [Base        ] Start application main loop
[INFO   ] [GL          ] NPOT texture support is available
[CEF Python] Initialize() called
[CEF Python] CefExecuteProcess(): exitCode = -1
[CEF Python] CefInitialize()
2015-07-09 12:20:09.283 python[4355:122290] Internals of CFAllocator not known; out-of-memory failures via CFAllocator will not result in termination. http://crbug.com/45650
[CEF Python] App_OnBeforeCommandLineProcessing_BrowserProcess()
[CEF Python] Command line string for the browser process:  --browser-subprocess-path=/Applications/Kivy.app/Contents/Resources/venv/lib/python2.7/site-packages/cefpython3/subprocess --lang=en-US --log-file=debug.log --log-severity=info --enable-release-dcheck --resources-dir-path=/Applications/Kivy.app/Contents/Resources/venv/lib/python2.7/site-packages/cefpython3 --locales-dir-path=/Applications/Kivy.app/Contents/Resources/venv/lib/python2.7/site-packages/cefpython3/locales --remote-debugging-port=51420 --no-sandbox
[0709/122009:WARNING:resource_bundle.cc(269)] locale_file_path.empty()
[0709/122009:FATAL:main_delegate.cc(449)] Check failed: !loaded_locale.empty(). Locale could not be found for en-US
Trace/BPT trap: 5

我发现一个讨论 here 建议手动设置 local_pak 标志以避免此错误。我从第 150 行开始对示例代码进行了以下更改:

# Command line switches set programmatically
g_switches = 
    "locale_pak": cefpython.GetModuleDirectory()
    +"/Resources/en.lproj/locale.pak",
    

#init CEF
cefpython.Initialize(settings, g_switches)

这解决了我的初始化问题! CEF 浏览器出现,但不会响应我键盘的任何输入。我也无法使用触控板滚动,但我可以使用它来点击链接。

我提供了这个问题的全部背景信息,以防我通过更改 locale_pak 标志走错路。

我正在使用:

Kivy v1.9.0  
Python v2.7.6  
cefpython3 v31.2  

我还应该提到,我可以毫无问题地运行与cefpython3 打包的wxpython.py 示例。

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

问题在于,在 kivy_.py 示例中,密钥代码仅针对 Linux 进行了翻译,请参见 translate_to_cef_keycode() 函数:

https://code.google.com/p/cefpython/source/browse/cefpython/cef3/linux/binaries_64bit/kivy_.py?r=5cf79c6eec11#355

对 Windows/OSX 键码的支持尚需添加。

【讨论】:

感谢您的帮助@Czarek。你知道解决这个问题吗?或者您知道在 Mac 上运行的 Kivy/CEFPython 示例吗?另外,您知道为什么 wxPython 示例不需要键码吗? @dslosky 解决方法是处理翻译代码,应该是一个小时的工作。 wxpython 示例在窗口模式下运行,所有操作都会自动处理。 Kivy 在 OSR 模式下运行,需要通过调用 SendKeyEvent 将关键事件发送到 CEF 的步骤。 @dslosky 在该函数中添加一个打印语句,然后遍历键盘上的所有键以查看代码是什么。如果你成功了,请在 cefpython 问题跟踪器中发送一个补丁。

以上是关于将 CEFPython 并入 Mac 上的 Kivy 应用程序——键盘输入不起作用的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Linux 上使用 pyinstaller 和 cefpython 创建可执行文件(ICU 数据的文件描述符无效)

JavaScript将视频并入画布框

tkinter + cefpython 仿美团桌面程序

中国普天并入中国电科,世界人工智能大会开幕,格力将接入鸿蒙

Caffe2现已并入PyTorch?真的假的

Caffe2现已并入PyTorch?真的假的