【发布时间】:2017-11-13 07:59:56
【问题描述】:
我尝试制作一个简单的应用程序,在单击放置在“屏幕一”上的按钮后在 Kivy 中打开一个网页。
我用这个话题(Python - Showing a web browser/iframe right into the app)作为参考,但我不明白如何使用迈克尔提供的代码......
所以我尝试了这个......当我启动 apk(使用 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()
应用程序不会崩溃,而是会在我启动时关闭。
我做错了什么?我确定我没有正确使用它...
来自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 结束。
【问题讨论】:
-
"我不明白如何使用代码" 这就是为什么复制和粘贴对于实际实现任何东西都是不好的方式,除非你知道这样的代码是做什么的。你应该先看看一些 basic examples :) “......它不起作用 :') 我做错了什么?”这就是
adb logcat的用途。没有人会在自己的设备上编译和运行它,这也是您需要提供日志的原因。此外,java 类实际上有documentation -
@KeyWeeUsr 是的,我知道复制和粘贴很糟糕......所以我开始使用您提供的链接研究迈克尔的代码。另一方面,我做了一个 adb logcat 并得到了这个:drive.google.com/file/d/0B8_6xoiJkXbGWjRZbDZkR0ZiTjg/…
标签: android python browser kivy native