【问题标题】:Python - Showing a web browser/iframe right into the appPython - 在应用程序中显示 Web 浏览器/iframe
【发布时间】:2014-04-11 09:45:43
【问题描述】:

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

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

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

【问题讨论】:

    标签: python iframe browser kivy


    【解决方案1】:

    这是一个在“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()
    

    【讨论】:

      【解决方案2】:

      您想在安卓设备上执行此操作?目前还没有内置的方法可以做到这一点,但我很确定可以通过 pyjnius 加载本机 android webview。我不确定当前的状态,但例如here 是如何做到这一点的一个例子。我在下面粘贴了一些代码,但如果您有任何问题,我建议您在 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)
      

      【讨论】:

      • 我尝试过这样做:class MyApp(App) : def build(self) : return Wv() 但是,应用程序在尝试创建 webview 小部件时崩溃了。原生 android 小部件是否应该嵌套在另一个小部件或其他东西中才能运行?
      • Android 小部件不会成为 kivy 普通小部件树的一部分,它们只能显示在整个 kivy 窗口的顶部或后面
      • 我实际上并没有阅读您在这里评论的答案,您的代码(返回Wv())实际上应该可以工作,因为 Wv 是一个仅实例化 android webview 的 kivy 小部件。这使我的回答具有误导性,对不起!我建议使用您的代码和错误详细信息发布一个新问题(或者可能更好,一个 kivy 邮件列表帖子)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 2022-12-09
      • 2017-10-13
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      相关资源
      最近更新 更多