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

问题描述 投票:0回答:5

我想创建一个在用户计算机上运行的应用程序,一个独立的应用程序,带有安装和其他功能,但我希望界面是一个浏览器,可以是内部的并显示为操作系统窗口,也可以使用外部访问浏览器(即某个 http 服务器)。

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

我还没有找到一个好的可以使用的 GUI 工具,并且总是在尝试混乱并最终没有得到任何结果后放弃这个想法。

python browser desktop httpserver
5个回答
12
投票

Python 提供了您应该感兴趣的两件事:

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

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

hg serve
可以启动 Web 服务器。

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

python -m 'wsgiref.simple_server'

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

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


3
投票

您可以使用睡衣。 它是 Google Web Toolkit 到 Python 的端口,这基本上意味着您用 Python 编写,它会被编译为 HTML 和 JS。


2
投票

有很多优秀的 GUI 工具可以满足您想要的 GUI 方式——HTML、CSS 和 Javascript。 如果您不知道,请使用正确的标签单独提出问题。

在这种安排中,Python 端不应该有自己的 GUI,而只是运行 Python 标准库的 HTTP 服务器的子类,仅提供 HTML、CSS 和 JS 文件,以及通过 JS 在其他 URL 上的 JSON 提供数据可以通过 Ajax 技术实现,本质上是实现存储和业务逻辑 - 因此,您可能想要什么“GUI 工具”还远不清楚?!

只需使用自己的“GUI 工具”单独开发 Python 端(例如使用 IDLE、Wingware、SPE 或任何您喜欢的东西)和 HTML / CSS / Javascript。 毕竟,Python 对这些文件所做的只是静态地服务它们。

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


1
投票

一个简单的 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

该示例源自如何在Python中实现AJAX的最小服务器?

http.server
是python的内置模块。然而,周围应该还有很多其他工具。


0
投票

您是否只是因为在使用 Python 小部件工具包(如 Tkinter、wxpython 和 pyqt)时遇到困难而求助于 Web 浏览器?

您尝试过Qt Designer吗? 它是一个图形 GUI 设计器,可以非常快速、轻松地开发美观的 GUI。 它会随 PyQt 自动安装。

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

© www.soinside.com 2019 - 2024. All rights reserved.