Answers:
可以在developer.ubuntu.com上找到Ubuntu上绑定和API的良好起点。我没有任何经验,但是您可能还想研究Gjs(GNOME的Javascript绑定)。
根据您尝试执行的操作,您可以像构建任何HTML + JS应用程序一样构建该应用程序,然后将其放入Webkit视图中。在python中做起来非常简单:
#!/usr/bin/env python
from gi.repository import Gtk, WebKit
import os, sys
class Browser:
def __init__(self):
self.window = Gtk.Window()
self.window.set_default_size(800, 600)
view = WebKit.WebView()
view.load_html_string("<strong>Hello World!</strong>", "file:///")
self.window.add(view)
self.window.show_all()
self.window.connect('destroy', lambda w: Gtk.main_quit())
def main():
app = Browser()
Gtk.main()
if __name__ == "__main__":
main()
您可以通过在Gtk窗口中使用嵌入式WebKit框架来使用HTML + Javascript进行界面开发(这在Python中最容易做到)。最困难的部分是通过HTML / Javascript应用程序与系统进行通信。
您可以通过在Javascript和Python之间传递消息来实现。但是,您将必须将系统逻辑编写为Python函数,但这非常容易做到。
这是一个简单的示例,显示了Python和Javascript之间的通信。在示例中,HTML / Javascript显示一个按钮,单击该按钮会将数组发送["hello", "world"]
到Python,Python将数组加入字符串“ hello world”并将其发送回Javascript。Python代码将数组的表示形式打印到控制台,而Javascript代码则弹出一个显示该字符串的警报框。
example.py
import gtk
import webkit
import json
import os
JAVASCRIPT = """
var _callbacks = {};
function trigger (message, data) {
if (typeof(_callbacks[message]) !== "undefined") {
var i = 0;
while (i < _callbacks[message].length) {
_callbacks[message][i](data);
i += 1;
}
}
}
function send (message, data) {
document.title = ":";
document.title = message + ":" + JSON.stringify(data);
}
function listen (message, callback) {
if (typeof(_callbacks[message]) === "undefined") {
_callbacks[message] = [callback];
} else {
_callbacks[message].push(callback);
}
}
"""
class HTMLFrame(gtk.ScrolledWindow):
def __init__(self):
super(HTMLFrame, self).__init__()
self._callbacks = {}
self.show()
self.webview = webkit.WebView()
self.webview.show()
self.add(self.webview)
self.webview.connect('title-changed', self.on_title_changed)
def open_url(self, url):
self.webview.open(url);
self.webview.execute_script(JAVASCRIPT)
def open_path(self, path):
self.open_url("file://" + os.path.abspath(path))
def send(self, message, data):
self.webview.execute_script(
"trigger(%s, %s);" % (
json.dumps(message),
json.dumps(data)
)
)
def listen(self, message, callback):
if self._callbacks.has_key(message):
self._callbacks[message].append(callback)
else:
self._callbacks[message] = [callback]
def trigger(self, message, data, *a):
if self._callbacks.has_key(message):
for callback in self._callbacks[message]:
callback(data)
def on_title_changed(self, w, f, title):
t = title.split(":")
message = t[0]
if not message == "":
data = json.loads(":".join(t[1:]))
self.trigger(message, data)
def output(data):
print(repr(data))
if __name__ == "__main__":
window = gtk.Window()
window.resize(800, 600)
window.set_title("Python Gtk + WebKit App")
frame = HTMLFrame()
frame.open_path("page.html")
def reply(data):
frame.send("alert", " ".join(data))
frame.listen("button-clicked", output)
frame.listen("button-clicked", reply)
window.add(frame)
window.show_all()
window.connect("destroy", gtk.main_quit)
gtk.main()
page.html
<html>
<body>
<input type="button" value="button" id="button" />
<script>
document.getElementById("button").onclick = function () {
send("button-clicked", ["hello", "world"]);
};
listen("alert", function (data) {alert(data);});
</script>
</body>
</html>
您真正需要注意的唯一python代码是def output(data):
文件末尾的代码,应该很容易理解。
为了确保运行本作python-webkit
并python-gtk2
安装,然后保存在同一文件夹和文件,运行:
python example.py
我开发了BAT,它是使用HTML,JS和CSS构建桌面应用程序的微型工具。
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
body {
font-family: Monaco, monospace;
color: white;
background: #3C3B38;
}
h1 { text-align: center; }
p { text-align: justify; }
button {
padding: 10px 20px;
-moz-border-radius: 4px 4px 4px 4px;
-webkit-border-radius: 4px 4px 4px 4px;
border-radius: 4px 4px 4px 4px;
display: block;
font-size: 14px;
text-decoration: none;
border: 1px solid #c0b7b0;
cursor: pointer;
width: 100%;
}
</style>
</head>
<body>
<h1>Hello World</h1>
<p> Ipsum deserunt architecto necessitatibus quasi rerum dolorum obcaecati aut, doloremque laudantium nisi vel sint officia nobis. Nobis ad nemo voluptatum molestiae ad. Nisi ipsum deserunt a illo labore similique ad? </p>
<p> Ipsum veniam laborum libero animi quo dignissimos. Possimus quidem consequatur temporibus consequatur odio, quidem deleniti! Similique totam placeat sint assumenda nulla dolor. Voluptatibus quasi veritatis distinctio consectetur nobis. Nemo reprehenderit? </p>
<p> Ipsum molestiae nesciunt commodi sint et assumenda recusandae! Earum necessitatibus sequi nulla fugit architecto omnis. Maiores omnis repellat cupiditate iure corporis dolorem sed amet nesciunt. Mollitia sapiente sit repellendus ratione. </p>
<p> Consectetur architecto ratione voluptate provident quis. At maiores aliquam corporis sit nisi. Consectetur ab rem unde a corporis reiciendis ut dolorum, tempora, aut, minus. Sit adipisci recusandae doloremque quia vel! </p>
<button onclick="BAT.closeWindow()">Close</button>
</body>
</html>
而且,我们以这种方式运行它:
bat -d index.html -t "BAT Hello World" -s 800x500
结果是:
至于直接访问平台,您应该签出Seed。
您还可以看看UserWebKit,它是Python3库,提供了Novacut和Dmedia UI(在UserCouch和Microfiber,BTW 之上构建)使用的关键功能。
经过深思熟虑,我认为不直接从JavaScript访问平台会更有趣,因为如果需要,您可以选择在标准浏览器中运行UI。该NOVACUT架构使用CouchDB的保持UI和后端服务器网络透明。在正常的单计算机情况下,服务器在该计算机上本地运行。但是,您也可以在其他系统上运行服务器(和CouchDB),而UI不会注意到两者之间的区别。
好吧,您可以包括一种语言,该语言可以运行诸如php之类的shell命令,并且这种方式可以利用诸如从网页安装应用程序并执行一些命令之类的优势(例如根据系统主题检测要使用的主题和使用的CSS)。例如,您有两个问题可能会有所帮助:
服务器可以同时处理Shell命令吗?(谈论执行多个命令)
从Web运行线路命令(单击网页链接)(谈论单击链接并从软件中心安装应用程序)
要了解使用哪种主题的方法,您可以解析ubuntu文件,该文件具有默认主题的值,然后根据该文件修改站点的CSS以反映新主题。
有关主题以及在哪里可以找到主题的问题可以在这里找到:
所有这些(如果您使用搜索,还会有更多帮助)帮助您知道解析时在何处查找以及可以检查哪些文件,以查看系统正在使用的主题以及在网页中使用的主题。
是的,您可以使用纯html / css / js编写应用程序,并且可以使用GObject自省功能对JS进行绑定。看看GnomeSeed https://live.gnome.org/Seed
SeedKit:https://live.gnome.org/SeedKit
现在我们有了AppJS- https://github.com/milani/appjs!
正如他们所说:“ 它使用Chromium作为核心(因此支持最新的HTML5 API),并使用Node.js作为主干。 ”