我有一个使用kivy编写的脚本,如果对回答问题有帮助,我想让它在运行时直接显示类似iframe的内容,而不是打开浏览器。例如像这样:
def browser():
url = "google.com"
iframe(url)
browser()
显然这样做行不通,因为Python不是HTML。请记住,我不是试图在网络上运行此脚本,而是在Kivy启动器上运行。按照预期,它不应该打开Web浏览器,而是在脚本中构建的框中显示页面。
以下是一个实际运行的例子,可以直接在“Kivy Launcher”应用程序中运行:
import kivy
from kivy.app import App
from kivy.lang import Builder
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')
class ServiceApp(App):
def build(self):
return Wv()
if __name__ == '__main__':
ServiceApp().run()
from android.runnable import run_on_ui_thread
WebView = autoclass('android.webkit.WebView')
LayoutParams = autoclass('android.view.ViewGroup$LayoutParams')
activity = autoclass('org.renpy.android.PythonActivity').mActivity
class Wv(Widget):
def __init__(self, **kwargs):
super(Wv, self).__init__(**kwargs)
self.create_webview()
@run_on_ui_thread
def create_webview(self):
webview = WebView(activity)
activity.addContentView(webview, LayoutParams(-1, -1))
webview.getSettings().setJavaScriptEnabled(True)
#having some trouble with this one: webview.setBackgroundColor(Color.TRANSPARENT)
html = "<html><body style='margin:0;padding:0;'>\
<script type='text/javascript'\
src='http://ad.leadboltads.net/show_app_ad.js?section_id=ID_HERE'>\
</script></body></html>"
activity.setContentView(webview)
webview.loadData(html, "text/html", "utf-8")
layout = LinearLayout(activity)
layout.addView(activity.mView)
activity.setContentView(layout)
Wv()
)应该可以工作,因为Wv是一个kivy小部件,只实例化了Android Webview。这使得我上面的回答误导了你,抱歉!我建议您发布一个新问题(或者更好的是,一个kivy邮件列表帖子),并提供您的代码和错误详细信息。 - inclement