PyObjCでメニューバーアプリ〜Color Pickerを作る4〜

現在このブログは中途半端に移行されていますので、画像が表示されなかったり、レイアウトが崩れたりする可能性があります。
この記事を旧ブログで閲覧するには、以下のURLからご覧ください。
http://blog2.monospace.jp/2008/03/28/pyobjc_color_picker04/

今回の課題は、「メニューバーのメニューにカラーサンプルと16進数値を表示する」です。 こんな感じで、 カラーサンプルと16進数値を表示したメニュー 別に簡単そうな話なんですが、ちょっと技が必要でした。 単純にメニューの一番上にメニュー項目を追加していくだけであれば、 [python] newitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( colorDict.keys()[0], objc.nil, '') self.statusMenu.insertItem_atIndex_(newitem, 0)[/python] こんな感じで、NSMenuItemのインスタンスをNSMenu(ここではself.statusMenu)に突っ込むだけですが、 左側にサラーサンプルを表示したい場合ちょっとやっかいです。 実は、左に表示するのが、画像ファイルなら簡単にできるんです。 [python]# newitemImageはあらかじめ作ったNSImageのインスタンス newitem.setImage_(newitemImage)[/python] という風にNSMenuに突っ込む前に、setImage_で画像を指定します。 今回は、画像ではなくて、その色で塗りつぶされた四角形を表示したいです。 画像が指定できるんであれば、四角形を画像っぽいものにしたらいいというわけで、 ここで使えるのが、NSCustomImageRepというクラス。 [python] customRep = NSCustomImageRep.alloc().initWithDrawSelector_delegate_(self.drawImage, self) newitemImage = NSImage.alloc().initWithSize_((16.0, 16.0)) # サイズだけ指定してNSImageをつくる newitemImage.addRepresentation_(customRep) newitem.setImage_(newitemImage) def drawImage(self, sender): """ CumtomImageRepが使用する描画メソッド """ ### 塗る色を指定(self.colorはNSColorクラスのインスタンス) self.color.setFill() ### 上で指定した色で塗る NSBezierPath.fillRect_(((0.0, 0.0), (16.0, 16.0))) [/python] NSBezierPathを使って塗りつぶされた四角形を作ってそれを画像として使います。 これでNSMenuに突っ込めるようになりました。 Cocoaはほんと便利です。 次回に続く。多分次はクリップボードにコピーするあたり。
Posted at: 
2008/03/28 01:43:22
0 Comments
0 TrackBacks
Tags: 
Trackback: 
http://blog.monospace.jp/2008/03/28/pyobjc_color_picker04/trackback/

TrackBacks

まだ登録されていません。

Comments

まだ登録されていません。

Add Comment

Add Comment