Sie können mithilfe von HTML + Javascript für die Benutzeroberfläche mithilfe eines eingebetteten WebKit-Frames in einem Gtk-Fenster entwickeln (dies ist in Python am einfachsten). Der schwierigste Teil ist die Kommunikation mit dem System über Ihre HTML / Javascript-Anwendung.
Sie können dies tun, indem Sie Nachrichten zwischen Javascript und Python übertragen. Sie müssen jedoch die Systemlogik als Python-Funktionen schreiben, dies ist jedoch recht einfach.
Hier ist ein einfaches Beispiel für die Kommunikation zwischen Python und Javascript. In diesem Beispiel zeigt HTML / Javascript eine Schaltfläche an, die beim Klicken ein Array ["hello", "world"]
an Python sendet , das das Array zu einer Zeichenfolge "Hallo Welt" zusammenfügt und es an Javascript zurücksendet. Der Python-Code gibt eine Darstellung des Arrays an die Konsole aus, und der Javascript-Code zeigt ein Warnfeld an, in dem die Zeichenfolge angezeigt wird.
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>
Der einzige Python-Code, auf den Sie hier wirklich achten müssen, ist der Code vom def output(data):
Ende der Datei, der ziemlich einfach zu verstehen sein sollte.
So führen Sie sicher , dass diese Marke python-webkit
und python-gtk2
werden dann speichern Sie die Dateien im selben Ordner und führen Sie installiert haben :
python example.py