使用浏览器作为界面的Python桌面应用程序?

时间:2010-04-10 01:45:12

标签: python browser desktop httpserver

我想创建一个在用户计算机上运行的应用程序,一个独立的应用程序,安装和什么不是,但我希望该界面是一个浏览器,内部显示为OS窗口或外部可访问使用浏览器(即一些http服务器)。

原因是因为我对Python有一点认识,但我想我可以管理,只要我有一些我可以使用和操作的基本根,那些就是HTML,CSS和Javascript。

我还没有找到一个好的GUI工具,我可以使用它,并且在试图弄乱并最终没有得到任何东西之后总是放弃这个想法。

5 个答案:

答案 0 :(得分:10)

Python提供了两件你感兴趣的东西:

  • 标准库中的Web服务器
  • 用于Web应用程序的标准化接口,称为WSGI

因此,向您的应用程序添加Web界面相对容易。例如,在Mercurial(版本控制系统)中,您有一个启动Web服务器的命令hg serve

要查看python启动Web服务器和WSGI应用程序,请执行以下操作:

python -m 'wsgiref.simple_server'

你可以查看wsgiref源代码或一些WSGI教程来做一个简单的应用程序。

之后,您可能想要使用Web框架(用于模板和合作),但这是另一个问题......

答案 1 :(得分:3)

您可以使用Pyjamas。它是Python的Web Web Toolkit的一个端口,它基本上意味着您使用Python编写,并将其编译为HTML和JS。

答案 2 :(得分:1)

有许多优秀的GUI工具可用于您想要的GUI - HTML,CSS和Javascript。如果您不知道,请在单独的问题中提出正确的标签。

这种安排中的Python方面应该没有自己的GUI,但只需运行Python标准库的HTTP服务器的子类,只提供HTML,CSS和JS文件,并通过其他URL上的JSON提供数据。 JS可以使用Ajax技术实现,实质上是实现存储和业务逻辑 - 因此,您可能想要的“GUI工具”远非明显吗?!

使用自己的“GUI工具”,单独开发Python方面(例如使用IDLE,Wingware,SPE或任何你喜欢的方式)和HTML / CSS / Javascript。毕竟,Python将对这些文件执行的操作是静态提供

您可能正在考虑使用一些Python端模板,例如Mojo& c,但我的建议是避免这种情况:相反,一直使用“瘦服务器架构”,使Python端成为RESTful服务器业务逻辑和存储层,并在浏览器中全部 GUI工作。

答案 3 :(得分:0)

您是否仅仅因为使用了Python小部件工具包(例如Tkinter,wxpython和pyqt)而难以使用网页浏览器?

你试过Qt Designer吗?它是一个图形化的GUI设计器,可以非常快速,轻松地开发出漂亮的GUI。它随PyQt自动安装。

http://www.riverbankcomputing.co.uk/software/pyqt/download

答案 4 :(得分:0)

一个简单的gui演示了如何使用python与浏览器对话:

sqr.py

import http.server

class TestHandler(http.server.SimpleHTTPRequestHandler):

    def do_POST(self):
        """Handle a post request by returning the square of the number."""
        length = int(self.headers.get_all('content-length')[0])
        data_string = self.rfile.read(length)
        x = float(data_string)
        self.send_response(200)
        self.send_header("Content-type", "text/plain")
        self.end_headers()
        self.flush_headers()
        self.wfile.write(str(x**2).encode())

server = http.server.HTTPServer(("", 8004), TestHandler)
server.serve_forever()

sqrt.html

<body>
<label for="fname">input x:</label>
<input type="text" id="fname" name="fname" onkeyup="runbuttonfunc()" value="4.0"><br>
<button id="runButton" onclick="runbuttonfunc()">=</button><br>
<label for="lname">output x*x:</label>
<input type="text" id="lname" name="lname"><br>

<script type="text/javascript">

function xml_http_post(url, data) {
    var req = new XMLHttpRequest();
    req.open("POST", url, true);
    req.onreadystatechange = function() {
        if (req.readyState == 4) {
            document.getElementById('lname').value = req.responseText
        }
    }
    req.send(data);
}

function runbuttonfunc() {
    xml_http_post("sqr.html", document.getElementById('fname').value)
}
</script>
</body>

使用python3 sqr.py运行程序,并在浏览器中使用地址http://localhost:8004/sqr.html

该示例源自How to implement a minimal server for AJAX in Python?http.server是python的内置模块。但是,周围应该还有许多其他工具。