使用 HTML & Javascript 来建立 Python 本地应用程序的图形用户界面
在一种叫做 QQ 的即时通信软件中、在一种叫做浩方的盗版游戏平台上,这种技术正在被剧烈地使用着。使用 HTML & Javascript 来建立 Python 本地应用程序的图形用户界面,有许多好处:比如可以让众多的网站界面设计师直接变成应用程序界面设计师;也有许多方法来实现它……
休息了一段时间之后,我又回到了广州,按照一篇别人给我写的传记的说法:沈崴又开始了他在广州纸醉金迷般的生活。
在年前,我开始为一个软件设计图形用户界面,当然我并不是一个专职的客户端程序员,出于程序员懒惰的优点,我花了两天的时间编写了一个 Python
脚本。实现了一个功能,就是在 HTML 中调用 Python 。这样,我就可以工作在我擅长的 Javascript
下来进行本地应用程序的设计了。整个界面可以通过 Dreamwaver 画出来,这当然是相当好玩的!
使用起来也是相当方便的:
<!-- example.html 界面部分 -->
<html>
<form action="HAHA://example.test"
method="get">
<input type="hidden" name="a" value="hello">
<input type="hidden" name="b" value="world">
<input type="submit">
</form><br>
------------<br>
或者:<br>
<a
href="HAHA://example.test?a=hello&b=world">submit</a><br>
------------<br>
或者使用 Javascript submit
</html>
# example.py
# Python Module example
import string
def test(**kw):
print string.join([kw["a"], kw["b"],
"!"])
在这个程序中, example.html 是程序界面,其中如果 form action 使用到的协议为 HTTP
那么将与普通的 HTML 页面没有区别,进行表单提交;而如果为 HAHA (这个是可以自定义的)的话,程序就会调用 Python 模块 example 的
test 函数,各个表单成员将变成传给 test 的 Keywords 参数。
这是相当容易实现的,我使用了 wxWidget 的 wxIEHtmlWin 组件,然后把它的
OnBeforeNavigate2 事件截获,取得 GetString ,如果发现提交的协议是 HAHA 的话,就调用 Python
模块,并且阻止页面眺转。
当然,这种方法只能使用 Get 方法,而 Get
方法有字串长度限制,这限制了参数传递的数据量大小。同时如何将返回值传递给 HTML 页面,也是一个大的问题。
而对于 Javascript 而言,则需要一个更好的接口,使调用 Python 脚本,就像在调用
Javascript 程序本身一样:
<html>
<script>
test = PythonMethod("example.test");
result = test("hello", "world");
alert(result);
</script>
</html>
使用一些技巧,这些问题都是可以解决的。我自己本身实现了一个简单的封装,感觉到:要漂亮地把 Python 接口到
HTML & Javascript ,是一件非常伤神的事情。

图片