Python-在应用程序中显示web浏览器/iframe
我有一个脚本,如果有助于人们回答问题,就是使用kivy。 我想让它在运行时显示一个iframe类型的东西,而不是打开 浏览器。例如,类似这样的事情:Python-在应用程序中显示web浏览器/iframe,python,iframe,browser,kivy,Python,Iframe,Browser,Kivy,我有一个脚本,如果有助于人们回答问题,就是使用kivy。 我想让它在运行时显示一个iframe类型的东西,而不是打开 浏览器。例如,类似这样的事情: def browser(): url = "google.com" iframe(url) browser() 显然,这是行不通的,因为python不是html。记住,我不是想跑 这个脚本在web上,但在kivy launcher上。正如预期的那样,它不应该打开 webbrowser,而不是在脚本中内置的框中显示页面。您正试图在a
def browser():
url = "google.com"
iframe(url)
browser()
显然,这是行不通的,因为python不是html。记住,我不是想跑
这个脚本在web上,但在kivy launcher上。正如预期的那样,它不应该打开
webbrowser,而不是在脚本中内置的框中显示页面。您正试图在android设备上执行此操作?目前还没有一种内置的方式来实现这一点,但我非常确定,通过pyjnius加载本机android webview是可能的。我不确定当前的状态,但举例来说,这就是如何做到这一点的一个例子。我已经在下面粘贴了一些代码,但我建议您在kivy邮件列表或irc上询问您是否有任何问题,因为此类问题正在讨论和开发中
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)
从android.runnable导入在ui线程上运行
WebView=autoclass('android.webkit.WebView')
LayoutParams=autoclass('android.view.ViewGroup$LayoutParams')
activity=autoclass('org.renpy.android.PythonActivity').mActivity
类别Wv(小部件):
定义初始(自我,**kwargs):
超级(Wv,自我)。\uuuuu初始值(**kwargs)
self.create_webview()
@在线程上运行
def创建_网络视图(自):
webview=webview(活动)
activity.addContentView(webview,布局参数(-1,-1))
webview.getSettings().setJavaScriptEnabled(True)
#有一些问题:webview.setBackgroundColor(Color.TRANSPARENT)
html=”\
\
"
activity.setContentView(webview)
webview.loadData(html、“文本/html”、“utf-8”)
布局=线性布局(活动)
layout.addView(activity.mView)
activity.setContentView(布局)
下面是一个实际运行的示例,它在“Kivy Launcher”应用程序中运行:
我尝试了:class MyApp(App):def build(self):return Wv(),但是,当尝试创建webview小部件时,应用程序崩溃了。本机android小部件是否应该嵌套在另一个小部件或其他部件中才能运行?android小部件不会是kivy正常小部件树的一部分,它们只能显示在整个kivy窗口的顶部或后面。我实际上没有阅读您在这里评论的我的答案,您的代码(返回
Wv()
)应该可以正常工作,因为Wv是一个只实例化android webview的kivy小部件。这使得我的回答具有误导性,对不起!我建议发布一个新问题(或者更好的是,发布一个kivy邮件列表帖子),其中包含您的代码和错误的详细信息。
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()