2017-06-11 39 views
1

「スクリーンワン」に配置されたボタンをクリックした後で、Kivy内のWebページを開く簡単なアプリケーションを作ろうとしています。Python Kivy - ネイティブウェブブラウザでURLを開くアプリケーション

だから私はこれを試してみました...と私はAPKを起動したときに(でビルドIを基準として、このトピック(Python - Showing a web browser/iframe right into the app)を使用するが、私はマイケルが提供するコードを使用する方法を理解していなかった...

Buildozer)それは動作しませんでした: ')

import kivy 
kivy.require('1.9.2') 

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.screenmanager import ScreenManager, Screen 

# MICHAEL'S CODE 
from kivy.utils import platform 
from kivy.uix.widget import Widget 
from kivy.clock import Clock 
from jnius import autoclass 
from android.runnable import run_on_ui_thread 

WebView = autoclass('android.webkit.WebView') 
WebViewClient = autoclass('android.webkit.WebViewClient') 
activity = autoclass('org.renpy.android.PythonActivity').mActivity 

class Wv(Widget): 
    def __init__(self, **kwargs): 
     super(Wv, self).__init__(**kwargs) 
     Clock.schedule_once(self.create_webview, 0) 

    @run_on_ui_thread 
    def create_webview(self, *args): 
     webview = WebView(activity) 
     webview.getSettings().setJavaScriptEnabled(True) 
     wvc = WebViewClient(); 
     webview.setWebViewClient(wvc); 
     activity.setContentView(webview) 
     webview.loadUrl('http://www.google.com/') 
# END OF MICHAEL'S CODE 

Builder.load_string(''' 

<ScreenOne>: 
    BoxLayout: 
     Label: 
      text: "SCREEN 1" 
     Button: 
      text: "GO GO GO TO GOOGLE !" 
      on_press: root.open_browser() 

<ScreenTwo>: 
    BoxLayout: 
     Label: 
      text: "SCREEN 2" 
     Button: 
      text: "GO GO GO TO SCREEN 1" 
      on_press: 
       root.manager.transition.direction = "right" 
       root.manager.transition.duration = 1 
       root.manager.current = "screen_one" 

''') 

class ScreenOne(Screen): 
    def open_browser(self): 
     return Wv() 

class ScreenTwo(Screen): 
    pass 

screen_manager = ScreenManager() 

screen_manager.add_widget(ScreenOne(name="screen_one")) 
screen_manager.add_widget(ScreenTwo(name="screen_two")) 


class BrowserApp(App): 
    def build(self): 
     return screen_manager 

app = BrowserApp() 
app.run() 

私がそれを起動すると、アプリはクラッシュせずに閉じるだけです。

私は間違っていますか?

06-13 12:54:47.559 7429 7510 I python : ImportError: No module named android

06-13 12:54:47.579 7429 7510 I python : Python for android ended.

+0

あなたは、このようなコードが何をするか知っている限り、コピー&ペーストが実際に何かを実装するための悪い方法である理由です「私は、コードの使用方法を理解していませんでした」。あなたはいくつかの**基本的な[例](https://github.com/kivy/pyjnius/)最初に見てください:) "...それは動作しませんでした: ')私は間違っていますか?それは['adb logcat'](https://developer.android.com/studio/command-line/logcat.html)のためのものです。誰もあなた自身のデバイスでコンパイルして実行するので、ログを提供する必要があります。また、Javaクラスは実際に[documentation](https://developer.android.com/reference/android/webkit/package-summary.html)を持っています – KeyWeeUsr

+0

@KeyWeeUsrええ、私はコピー&ペーストが悪いことを知っています...だから私は勉強を始めますあなたが提供したリンクのマイケルコード。一方、私はadb logcatを作ってこれを手に入れました:https://drive.google.com/file/d/0B8_6xoiJkXbGWjRZbDZkR0ZiTjg/view?usp=sharing – Dahaarl

答えて

2

あなたは、私が抽出されたコメントは二つの重要なラインに投稿ログから:

私は... adb logcatから

ログ私はそれを正しい方法を使用していないことを確信しています

06-13 12:54:47.559 7429 7510 I python : ImportError: No module named android 
06-13 12:54:47.579 7429 7510 I python : Python for android ended. 

これは基本的にコピーしたコードを意味:それはDOEので

from android.runnable import run_on_ui_thread 

が動作しません。 androidモジュールを検出しないでください。モジュールには別のrecipeがあります。したがって、Cythonコードをコンパイルしてアプリケーションに追加するように、要件に追加する必要があります。そうしないと、インポートは常に失敗します。

基本的に、このような乱雑なlogcat→「python」、「Traceback」、「Python for android」、「kivy」を調べるときは、常に3-4個のキーワードを検索したいと考えています。あなたはそれを使用する場合、そのためのbuildozerでフィルタがあります:

android.logcat_filters = *:S python:D 
+0

ああ、あなたがログを読む方法です...私は 'androidモジュール 'を要求しているとタダ:私はクラッシュメッセージを持っている!ここに新しいログがあります:https://drive.google.com/file/d/0B68O3RHHvPQDcW5nZ1FYdDFiMDQ/view?usp=sharing「06-14 09:52:45.131 5040 5160とのリンクがありますか?python:crystax_pythonはありません存在する? – Dahaarl

+0

'org.renpy.android.PythonActivity'の代わりに' org.kivy.android.PythonActivity'を使う必要があります。 – KeyWeeUsr

+0

ありがとう、それは動作します!今度は、最後のWebページ/メニューに戻る/ナビゲートする戻るボタンを実装する必要があり、それは使用可能になります!再度、感謝します ! – Dahaarl

関連する問題