PyObjCでメニューバーアプリ〜Color Pickerを作る3〜
投稿日:2008/03/27 01:29:18
過去の記事は移行時の問題により、画像が表示されなかったり、レイアウトが崩れたりしている可能性があります。
Tweet
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
まだ登録されていません。