注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

蜻蜓点水 举重若轻

君子终日乾乾

 
 
 

日志

 
 

使用 HTML & Javascript 来建立 Python 本地应用程序的图形用户界面

2006-10-31 11:38:50|  分类: JavaScript |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在一种叫做 QQ 的即时通信软件中、在一种叫做浩方的盗版游戏平台上,这种技术正在被剧烈地使用着。使用 HTML & Javascript 来建立 Python 本地应用程序的图形用户界面,有许多好处:比如可以让众多的网站界面设计师直接变成应用程序界面设计师;也有许多方法来实现它……


    休息了一段时间之后,我又回到了广州,按照一篇别人给我写的传记的说法:沈崴又开始了他在广州纸醉金迷般的生活。


    在年前,我开始为一个软件设计图形用户界面,当然我并不是一个专职的客户端程序员,出于程序员懒惰的优点,我花了两天的时间编写了一个 Python 脚本。实现了一个功能,就是在 HTML 中调用 Python 。这样,我就可以工作在我擅长的 Javascript 下来进行本地应用程序的设计了。整个界面可以通过 Dreamwaver 画出来,这当然是相当好玩的!


    使用起来也是相当方便的:


    <!-- example.html 界面部分 -->
    <html>
    <form action="HAHA://example.test" method="get">
    <input type="hidden" value="hello">
    <input type="hidden" 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 ,是一件非常伤神的事情。

  评论这张
 
阅读(2902)| 评论(3)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017