我想创建一个在用户计算机上运行的应用程序,一个独立的应用程序,具有安装和其他功能,但我希望界面是一个浏览器,可以是内部的并显示为操作系统窗口,也可以是使用浏览器访问的外部(即一些http服务器)。
原因可能是因为我对 Python 知之甚少,但我认为只要我有一些可以使用和操作的基本根,我就可以管理,那就是 HTML、CSS 和 Javascript。
我还没有找到一个我可以使用的好的 GUI 工具,并且总是在试图搞砸并最终没有得到任何东西之后放弃这个想法。
我想创建一个在用户计算机上运行的应用程序,一个独立的应用程序,具有安装和其他功能,但我希望界面是一个浏览器,可以是内部的并显示为操作系统窗口,也可以是使用浏览器访问的外部(即一些http服务器)。
原因可能是因为我对 Python 知之甚少,但我认为只要我有一些可以使用和操作的基本根,我就可以管理,那就是 HTML、CSS 和 Javascript。
我还没有找到一个我可以使用的好的 GUI 工具,并且总是在试图搞砸并最终没有得到任何东西之后放弃这个想法。
Python 提供了两件你应该感兴趣的东西:
因此,在您的应用程序中添加 Web 界面相对容易。例如,在 Mercurial(版本控制系统)中,您有一个hg serve
启动 Web 服务器的命令。
要查看 python 启动 Web 服务器和 WSGI 应用程序,只需执行以下操作:
python -m 'wsgiref.simple_server'
您可以查看 wsgiref 源代码或一些 WSGI 教程来做一个简单的应用程序。
之后,您可能想要使用 Web 框架(用于模板和合作),但这是另一个问题......
你可以使用睡衣。它是 Google Web Toolkit 到 Python 的一个端口,这基本上意味着你用 Python 编写,它会被编译成 HTML 和 JS。
有很多优秀的 GUI 工具可以让您按照自己的方式创建 GUI——HTML、CSS 和 Javascript。如果您不知道,请使用正确的标签在单独的问题中提问。
在这种安排下,Python 端应该没有自己的 GUI,而只是运行 Python 标准库的 HTTP 服务器的子类,只是通过 JS 可以在其他 URL 上的 JSON 提供 HTML、CSS 和 JS 文件和数据使用 Ajax 技术,本质上实现存储和业务逻辑——因此,您可能想要什么“GUI 工具”远非显而易见?!
只需单独开发 Python 端(例如,使用 IDLE、Wingware、SPE 或任何你喜欢的)和 HTML / CSS / Javascript,使用它自己的“GUI 工具”。毕竟,Python 对这些文件所做的只是静态地为它们服务。
您可能正在考虑使用一些 Python 端模板,例如 Mojo &c,但我的建议是避免这种情况:相反,一直使用“瘦服务器架构”,使 Python 端成为业务逻辑和存储的 RESTful 服务器层,并在浏览器中完成所有GUI 工作。
您是否仅仅因为在使用 Python 小部件工具包(如 Tkinter、wxpython 和 pyqt)时遇到困难而求助于 Web 浏览器?
你试过Qt Designer吗?它是一个图形 GUI 设计器,使开发美观的 GUI 变得非常快速和容易。它会随 PyQt 自动安装。
一个简单的 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的内置模块。然而,周围应该有许多其他工具。