用python做flash动画_将Flash应用于Python项目

本文介绍了如何在Python环境下直接操作Flash OCX,实现不依赖浏览器的Flash与Python交互。通过调用Flash OCX的标准COM接口IDispatch,结合wxPython库创建窗口并显示Flash内容。同时,讲解了Flash ocx与外界通信的方法,包括调用COM对象的自动化接口和使用Flash ExternalInterface。示例代码展示了如何从Python调用Flash函数以及从Flash调用Python函数,实现了双向通信。
摘要由CSDN通过智能技术生成

=== 写在之前 ===

{ { {

这篇所说的是关于建立python调用Flash的本地应用,不同于Adobe的Apollo。

没有用到浏览器嵌入flash网页的方法,直接在pythonwin或者wxpython建立的窗口中插入Flash

ocx。

因为是操作Activex控件的方式因此大概只适用于windows平台。抱歉我并未在其它平台上试过这种方法,不过linux中应该也有类似的技术。}}}

=== 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到了8.5以后的版本就基本不再发展了,我也渐渐不用它了。(听说Adobe收购MicroMedia以后,还会推出Director

11)}}}

=== Flash ocx与外界通迅的方法 ===

==== 调用ocx标准COM接口IDispatch ====

这种方法最简单,也比较通用。

它又叫COM对象的自动化接口。使用自动化,对象就可以提供一个简单的自动化接口,这样脚本语言作者只需掌握IDispatch和几个COM应用程序接口就可以了。

pythonwin的作者 Mark Hammond 的一本书(Python Programming on

Win32)就讲到了怎样用python直接操作COM对象(操作的函义包括使用和发布)。如果想深入细节的话,可以参考这本书。

Python 程序使用 win32com.client.Dispatch() 方法来创建 COM

objects。

如创建一个 Flash COM object.

{ { {#!python

>>> 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类就行了。

例:

{ { {#!python

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层级下。

这儿有个例子

http://www.sephiroth.it/weblog/archives/2004/05

/wxpython_and_flash_first_test.php

{ { {#!python

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import wx, sys, os

import string, codecsfrom wx.lib.flashwin

import FlashWindow

from wx.lib.flashwin import EVT_FSCommand

#----------------------------------------<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值