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

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

Color Pickerを作るの続きです。ここからは重要そうなとこを中心に書いていきます。 今回は、カラーパネルを閉じたときに色の履歴に追加するという処理をいれるというあたりです。 システムのカラーパネルを開くのは、Interface Builder (IB)からでもできたんですが、 Color Pickerを閉じたときに保存という処理がそれではできないような気がしたので、オープン処理から行ってみました。 カラーパネルを開くには、こんなアクションを書きます。 [python] @objc.IBAction def openColorPanel_(self, sender): self.colorPanel = NSColorPanel.sharedColorPanel() self.colorPanel.orderFront_(objc.nil) self.colorPanel.setDelegate_(self) self.app.activateIgnoringOtherApps_(objc.YES) [/python] これを、メニューのShow ColorsとIBでつなぎます。 NSColorPanel.sharedColorPanel()でカラーパネルは開きます。 このときに画面の一番手前に持ってきたいので、orderFront_メッセージを送ります。 setDelete_(self)でカラーパネルから受け取るdelegateを自分自身のクラスに設定します。 あとは、self.app.activateIgnoringOtherApps_(objc.YES)で、このアプリケーションが、 他のアプリケーションを差し置いて最前面に現れるようにします。 ちなみにこれをしないと、カラーパネルの外でマウスをクリックした場合にカラーパネルが消失してしまい、 再表示できなくなってしまったりしました。 delegateメソッドはこんな感じです。 [python]def changeColor_(self, sender): color = sender.color() #senderはNSColorPanel try: self.colorDict = self.convertFromColorToHex(color) except: self.colorDict = {'#FFFFFF': NSColor.whiteColor()} def windowShouldClose_(self, sender): if len(self.historyColors) == self.maxHistoryNum: self.historyColors = self.historyColors[1:] if len(self.colorDict) > 0: self.historyColors.append(self.colorDict) self.rebuildMenu() self.colorPanel.orderOut_(objc.nil) [/python] changeColor_はカラーパネル上で色をクリックしたときに毎回呼ばれます。 クリックしたときに取得できるのは、NSColorPanelクラスなので、 sender.color()でNSColorのインスタンスを取得します。 今回、#FFFFFFという16進数値が欲しいので、これに変換します。 後々、NSColorも必要になるので、dictの値として入れておきました。 WindowShoudClose_はカラーパネルが閉じられたときに呼ばれます。 このときに最後にクリックされていた色を履歴として保存します。履歴は、あらかじめ設定した最大履歴表示数分まで残します。 あとは、メニューを再構築して、履歴を表示します。最後にorderOut_でカラーパネルを閉じる処理をします。 カラーパネル部分はこんな感じです。 次はメニューの再構築部分です。 つづく。
Posted at: 
2008/03/27 01:29:18
0 Comments
0 TrackBacks
Tags: 
Trackback: 
http://blog.monospace.jp/2008/03/27/pyobjc_color_picker03/trackback/

TrackBacks

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

Comments

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

Add Comment

Add Comment