2016-05-31 9 views
1

Я пишу графический интерфейс python3 + webkit2 + gtk3. Все работает нормально, но когда я попытался использовать WebKit2.WebView.run_javascript_finish() в функции обратного вызова, получив return (объект WebKit2.JavascriptResult objetc), e extrat значение с помощью WebKit2.JavascriptResult.get_value(), я получил " TypeError: Не удалось найти внешний структурный конвертер для JavaScriptCore.Value.WebKit2.JavascriptResult.get_value() throws exception "TypeError: Не удалось найти внешний структурный конвертер для JavaScriptCore.Value.

У меня есть «из gi.repository import JavaScriptCore» в импорте, и я не знаю, почему эта ошибка происходит.

ps: Извините за мой страшный английский.

ответ

1

К сожалению, использование библиотеки JavaScriptCore не поддерживается в Python.

Определения в gi.repository.JavaScriptCore включают только непрозрачные определения для JavaScriptCore.Value и JavaScriptCore.GlobalContext, чтобы предоставить информацию о типе для функций, которые используют эти типы; как вы можете проверить, просмотрев /usr/share/gir-1.0/JavaScriptCore-4.0.gir. Но, как вы обнаружили, вы не можете называть эти функции, потому что нет никакой информации о том, как преобразовать эти типы в собственные объекты Python.

Я рекомендую написать функцию в C, которая принимает в вашем WebKit2.JavaScriptResult и извлекает любую необходимую информацию из него, а затем экспортирует эту функцию в свою собственную библиотеку GIR. Таким образом, вы не будете использовать какие-либо типы JavaScriptCore в своем коде Python. Это должно выглядеть так:

from gi.repository import MyAppPrivate 
# ... 
def on_javascript_finish(obj, res): 
    result = obj.run_javascript_finish(res) 
    my_real_results = MyAppPrivate.process(result) 
+0

Спасибо, C и GIR немного сложнее, чем я могу иметь дело, но я рад получить ответ. –