आप एक Gtk विंडो में एम्बेडेड WebKit फ्रेम का उपयोग करके इंटरफ़ेस के लिए HTML + जावास्क्रिप्ट का उपयोग करके विकसित कर सकते हैं (यह पायथन में करना सबसे आसान है)। सबसे कठिन हिस्सा आपके HTML / जावास्क्रिप्ट एप्लिकेशन से सिस्टम के साथ संचार कर रहा है।
आप जावास्क्रिप्ट और पायथन के बीच संदेशों को पास करके ऐसा कर सकते हैं। हालाँकि, आपको सिस्टम लॉजिक को पायथन फ़ंक्शन के रूप में लिखना होगा, लेकिन ऐसा करना बहुत आसान है।
यहाँ एक सरल उदाहरण है जो पायथन और जावास्क्रिप्ट के बीच संचार दिखा रहा है। उदाहरण में, HTML / Javascript एक बटन प्रदर्शित करता है, जब क्लिक ["hello", "world"]
करने पर पायथन को एक सरणी भेजता है जो सरणी को एक "हैलो वर्ल्ड" में जोड़ता है और इसे वापस जावास्क्रिप्ट में भेजता है। पायथन कोड कंसोल के लिए सरणी का प्रतिनिधित्व करता है और जावास्क्रिप्ट कोड स्ट्रिंग को प्रदर्शित करने वाले अलर्ट बॉक्स को पॉप अप करता है।
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>
केवल अजगर कोड जिसे आपको वास्तव में यहाँ पर ध्यान देने की आवश्यकता है वह कोड है def output(data):
फ़ाइल के अंत से जिसे समझना बहुत आसान होना चाहिए।
इसे चलाने के लिए सुनिश्चित करें python-webkit
और python-gtk2
स्थापित हैं तो उसी फ़ोल्डर में फ़ाइलों को सहेजें और चलाएं:
python example.py