[OSX][Python]QuartzとPythonスクリプト | Cocoa練習帳

[OSX][Python]QuartzとPythonスクリプト

Pythonをマスターする必要が出てきた。でも漠然と素のスクリプトの練習をしても仕方がないと思う。多分、PythonのWebアプリケーションのフレームワークを使ったサイトを立ち上げてみるのが要求に対する適切な対応だと思うが、ここはCocoa練習帳ですし、他とは少し違うスキルが必要という事で、QuartzツールをPythonスクリプトで制作する事に挑戦だ!




OS X Lion (10.7)には、2.7系列が組み込まれているようだ。




$ python -V
Python 2.7.1
$ python --version
Python 2.7.1
$ which python
/usr/bin/python



以前は、/Developer/Examples/Quartz/Python/API-SUMMARY にQuartz Python APIの文書があったようが、現在はない。




色々探してみて見つけたのがこれ。実は新しいXcodeインストール時に誤って古いXcodeを削除しなかったのだが、それがよかった。/Developer/Documentation/Python/ に情報があった。




早速、Retina以前のiPhone画面サイズの空のPDF書類「demo.pdf」を作成。




$ cat demo.py 
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from CoreGraphics import *
 
# iOS size
mediaRect = CGRectMake(0.0, 0.0, 640.0, 960.0)
 
context = CGPDFContextCreateWithFilename("demo.pdf", mediaRect)
context.beginPage(mediaRect)
 
context.endPage()
context.finish()
 
# End Of File



このスクリプトを実行すれば、demo.pdfというファイルが生成されるのが確認できると思う。




空白ページだと寂しいので、赤色の四角形を描画。




$ cat demo.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from CoreGraphics import *
 
# iOS size
mediaRect = CGRectMake(0.0, 0.0, 640.0, 960.0)
 
context = CGPDFContextCreateWithFilename("demo.pdf", mediaRect)
context.beginPage(mediaRect)
 
context.setRGBFillColor(1.0, 0.0, 0.0, 1.0)
ourRect = CGRectMake(20.0, 20.0, 130.0, 100.0)
context.fillRect(ourRect)
 
context.endPage()
context.finish()
 
# End Of File



あれ、CGContextSetRGBFillColorに相当する箇所でエラーとなっている。




$ ./demo.py
Traceback (most recent call last):
  File "./demo.py", line 12, in
    context.setRGBFillColor(1.0, 0.0, 0.0, 1.0)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/CoreGraphics/__init__.py", line 528, in setRGBFillColor
    def setRGBFillColor(*args): return _CoreGraphics.CGContext_setRGBFillColor(*args)
TypeError: in method 'CGContext_setRGBFillColor', argument 2 of type 'CGFloat'



何故だろう?




関連情報
Programming with Quartz: 2D and PDF Graphics in Mac OS X

Quartz 2D Programming Guide

Python Programming Language

RubyCocoa

Scripting Bridge Programmin Guide

Ruby and Python Programming Topics for Mac