2015-07-09 13 views
5

Tôi đang cố gắng chạy ứng dụng Kivy đơn giản nằm ở here trên OSX.Kết hợp CEFPython vào ứng dụng Kivy trên Mac - đầu vào bàn phím không hoạt động

Lúc đầu, CEF không thành công trong quá trình khởi tạo. Kết quả là:

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 

Tôi tìm thấy một cuộc thảo luận here rằng đề nghị tự thiết lập các local_pak cờ để tránh lỗi này. Tôi đã thực hiện các thay đổi sau đối với mã ví dụ bắt đầu trên dòng 150:

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

#init CEF 
cefpython.Initialize(settings, g_switches) 

Điều này đã giải quyết được vấn đề khởi tạo của tôi! Trình duyệt CEF xuất hiện, nhưng sẽ không trả lời bất kỳ đầu vào nào từ bàn phím của tôi. Tôi cũng không thể cuộn bằng bàn di chuột của mình, mặc dù tôi có thể sử dụng nó để nhấp vào các liên kết.

Tôi đã cung cấp toàn bộ lý lịch về vấn đề này trong trường hợp tôi đã đi sai tuyến đường bằng cách thay đổi cờ locale_pak.

Tôi đang sử dụng:

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

Tôi cũng nên đề cập đến mà tôi có thể chạy wxpython.py ví dụ mà được đóng gói với cefpython3 mà không vấn đề.

Bất kỳ trợ giúp nào sẽ được đánh giá rất nhiều!

Trả lời

1

Vấn đề là trong ví dụ kivy_.py mã chủ chốt được dịch đặc biệt cho Linux chỉ, xem translate_to_cef_keycode() chức năng:

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

Hỗ trợ cho Windows/OSX mã chủ chốt cần chưa được thêm.

+0

Cảm ơn sự giúp đỡ của bạn @Czarek. Bạn có biết một công việc xung quanh cho việc này không? Hoặc bạn có biết một ví dụ Kivy/CEFPython chạy trên máy Mac không? Ngoài ra, bạn có biết tại sao ví dụ wxPython không yêu cầu mã khóa không? – dslosky

+0

@dslosky cách giải quyết là làm việc trên các mã dịch, phải mất một giờ làm việc. Ví dụ wxpython chạy trong chế độ cửa sổ và tất cả được lấy tự động. Kivy chạy trong chế độ OSR và yêu cầu bước gửi các sự kiện quan trọng đến CEF bằng cách gọi SendKeyEvent. –

+0

@dslosky Thêm câu lệnh in trong chức năng đó và xem qua tất cả các phím trên bàn phím của bạn để xem mã là gì. Nếu bạn thực hiện công việc đó, vui lòng gửi bản vá trong trình theo dõi vấn đề cefpython. –

Các vấn đề liên quan