Differences between revisions 3 and 39 (spanning 36 versions)
Revision 3 as of 2007-09-05 06:59:00
Size: 3742
Editor: Azureon
Comment:
Revision 39 as of 2008-01-18 05:34:02
Size: 189
Editor: Azureon
Comment:
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
= 将Flash应用于Python项目 =
== 基于本地的Python应用程序 ==
Line 6: Line 4:
写在之前
这篇所说的是关于建立python调用Flash的本地应用,不同于Adobe的Apollo。
没有用到浏览器嵌入flash网页的方法,直接在pythonwin或者wxpython建立的窗口中插入Flash ocx。
因为是操作Activex控件的方式因此大概只适用于windows平台。抱歉我并未在其它平台上试过这种方法,不过linux中应该也有类似的技术。
[:DjangoFlash:Django 与 Flash 的结合!]
Line 12: Line 7:
Flash ocx介绍
Flash ocx实际上是一种COM组件开发模型(Microsoft Component Object Model),它原先是从Windows 3.x中的OLE发展过来的。现在又被改名叫做Activex。Activex是COM的一种,一般是指带有UI界面的COM。
Flash ocx的本名是叫Shockwave Flash Object,是一个Activex控件。Activex控件文件名的后缀是ocx。
原先的Shockwave包括了很多东西。被Adobe收购的MicroMedia公司的另一个产品Director的web应用就叫shockwave,它集合了视频流、Flash、shockwave 3D于一身。
对于Director我还是挺有感情的,我的第一份工作就是做为一个Director程序员,只不过Director到了8.5以后的版本就基本不再发展了,我也渐渐不用它了。
Line 18: Line 8:
["将Flash应用于Python项目"]
Line 19: Line 10:
Flash ocx与外界通迅的方法
1、调用ocx标准COM接口IDispatch
这种方法最简单,也比较通用。
它又叫COM对象的自动化接口。使用自动化,对象就可以提供一个简单的自动化接口,这样脚本语言作者只需掌握IDispatch和几个COM应用程序接口就可以了。
pythonwin的作者 Mark Hammond 的一本书(Python Programming on Win32)就讲到了怎样用python直接操作COM对象(操作的函义包括使用和发布)。如果想深入细节的话,可以参考这本书。
Python 程序使用 win32com.client.Dispatch() 方法来创建 COM objects。
如创建一个 Flash COM object.

>>> import win32com.client
>>> fl = win32com.client.Dispatch("ShockwaveFlash.ShockwaveFlash.9") #Flash 9 的ProgID是ShockwaveFlash.ShockwaveFlash.9,有很多工具可以查到机器内部注册的COM组件信息

这样就得到了Flash COM object,你可以让它LoadMovie,让它Play,但是你暂时还看不到它,你得传给它一个窗口,这样它才能显示在窗口。
所幸wxpython帮我们封装了这一切,你只需要调用wx.lib.flashwin.FlashWindow类就行了。
例:
import wx
from wx.lib.flashwin import FlashWindow

class CGui(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, 101, "map", size = (800, 600), style = wx.FRAME_SHAPED)
        self.flash = FlashWindow(self, style=wx.SUNKEN_BORDER, size = (800, 600)) #用wx.lib.flashwin.FlashWindow创建窗口
        self.flash.LoadMovie(0, 'C:\\drop_shadow_dog.swf') #播放"C:\\drop_shadow_dog.swf"的Flash影片
        self.flash.SetSize((800, 600));
    
    def getText(self):
        returnValue = self.flash.GetVariable('FlashValue') #从Flash端
        return returnValue
            
    def setText(self, text):
        self.flash.SetVariable("PythonValue", text) #传给Flash变量
        
这些传递变量在Flash AS端都处于_root层级下。

2、使用Flash ExternalInterface
ExternalInterface类是Flash的外部接口, 它能让Flash与外部容器直接通迅。举个例子,包含JavaScript的Html网页。这是Flash推荐的方式。我们也可以用Python与它通迅。
Azureon

Email: [[MailTo([email protected])]]

----
CategoryHomepage ["个人网页分类"]
["用SSE2指令协助Python进行高性能计算"]

[:DjangoFlash:Django 与 Flash 的结合!]

["将Flash应用于Python项目"]

["用SSE2指令协助Python进行高性能计算"]

Azureon (last edited 2009-12-25 07:10:01 by localhost)