【问题标题】:How to display python application in html?如何在 html 中显示 python 应用程序?
【发布时间】:2012-12-09 22:41:26
【问题描述】:

我用 Python 编写了一个程序,它使用 matplotlibtkinter 绘制一些图形。
我想在我的网页上显示该程序以供免费使用。
如何让这个 Python 程序在网页上运行?

【问题讨论】:

    标签: python html matplotlib tkinter


    【解决方案1】:

    您应该查看mod_wsgi 和 python 社区中现有的众多网络包之一,或者构建您自己的。

    但是您还需要了解 tkinter 是一个 gui 库,它不会从网络上运行,这听起来像是您想要的。但相反,您可以为您的代码构建一个 Web 界面,如果表示逻辑与应用程序逻辑很好地分离,这应该不难。话虽如此,如果您是一般编程或特别是 Web 编程的新手,这绝对不是一件容易的事。

    【讨论】:

      【解决方案2】:

      看看Flask 是一个轻量级框架,用于制作网络应用程序,然后有一个类似的路由:

      @app.route("/graph/<input>")
      def drawGraph(input):
          # Graph drawing code goes here.
          image = # The image file as a string, as if you'd read it in from a file
                  # object
      
          return Request(image, mimetype="image/png")
      

      然后在模板中,您可以使用/graph/ url 为适当的输入获取图形并将它们呈现在&lt;img&gt; 标签中。

      【讨论】:

        【解决方案3】:

        如果您对使用网络框架烧瓶感兴趣,请查看this,从这个讨论中了解如何创建graph on-the-fly using matplotlib in flask.

        我建议将图像存储在 amazons s3 服务之类的地方。这样,图像将很容易在会话之间进行访问。所以从上面的线程链接修改代码...

        以 png 格式返回对象:

        from matplotlib.pyplot import figure
        from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
        import StringIO
        
        def create_a_graph()
            fig = figure(figsize=a_size_integer,a_size_integer))
            canvas = FigureCanvas(fig)
            canvas.print_png(png_output)
        
            return png_output
        

        然后使用 boto 将它们上传到 amazons s3 站点,并在您选择的任何框架上显示它们。

        我正在研究的current project 就是这样做的。查看文件:graph.py、tools.py、views.py 和 base.html。当然,这需要了解 boto、flask 和 matplotlib,但至少它为您提供了一个起点。

        【讨论】:

        • 废话回答,上传静态图片不做web应用
        • 否,但上传动态生成的图像并返回链接可能会...
        【解决方案4】:

        解决此类问题的常用方法是将程序的核心与界面分开。

        一种方法是将程序转换为模块,然后从 GUI 和 Web 框架中导入该模块。

        另一种方法是将程序变成daemon。然后,GUI 和 Web 界面都使用某种消息传递协议与之对话。这方面的一个例子是例如ipython.

        【讨论】:

          猜你喜欢
          • 2010-10-23
          • 2011-05-15
          • 2015-08-30
          • 1970-01-01
          • 2011-08-12
          • 2011-05-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多