Python - 在应用程序中显示 Web 浏览器/iframe

2022-01-15 00:00:00 python kivy iframe browser

问题描述

我有一个脚本,如果对人们回答问题有帮助的话,我正在使用 kivy.我想让它在运行时直接显示 iframe 之类的东西,而不是打开浏览器.例如这样的:

I have a script which if helpful to people answering questions, is using kivy. I want to have it show a iframe kind of thing right into it when run, instead of opening the browser. For example something like this:

def browser():
    url = "google.com"
    iframe(url)
browser()

显然这不起作用,因为 python 不是 html.请记住,我不是想跑步这个脚本在网络上,但在 kivy 启动器上.正如预期的那样,它不应该打开浏览器,而是在脚本内置的框中显示页面.

Obviously this wouldnt work as python is not html. Keep in mind, I am not trying to run this script on the web, but on the kivy launcher. As intended, it should not open the webbrowser but instead show the page in a box built right into the script.


解决方案

这是一个在Kivy Launcher"应用程序中运行的实际运行示例:

Here's an actual running example which works right inside the "Kivy Launcher" app:

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()

相关文章