在 Mac 上用 Python + PyObjc 的第一步

一直以來很想在 Mac 上寫寫 GUI 程式,但是一直覺得好像沒辦法把 Objective-C 學好,於是只好繼續使用 Python 語言,搭配 PyObjc 來寫 :p

還好 Apple 自家出的 Xcode 整合式開發環境對於這樣的 bridge 還算友善,在建立新專案的時候,就可以直接選擇 Cocoa-Python * Application 了!

From Screenshots

當 Xcode 生成一個專案後,它會預設把這個應用程式的 main loop 給 bind 到 專案名稱AppDelegate.py 這個 class 上。也就是寫一個簡單的程式時,你可以把介面上的控制項 handler 都 bind 到這個 class 裡的某個 method。比方說

From Screenshots

在 PyObjc 裡,如果要讓一個 method 是控制項的處理器,要把它定義成一個 @objc.IBAction (別忘了 import objc),並且在函式名稱最後加上一個 _ ,如上圖所示,我寫了一個 clickMe_ 的 method。

接著,打開預先建立好的 MainMenu.xib,Xcode 會用 Interface Builder 來開啟這個檔案,然後你就可以拉一個按鈕到主視窗上:

From Screenshots

接下來要做的事,就是要把這個按鈕按下的動作連結到剛才寫的那個 method 上面,其實在 Interface Builder 裡要做這件事也很簡單,只要 按住 Ctrl 鍵,然後在按鈕上按住滑鼠鍵,再拖到 fooAppDelegate 的圖案上,就會出現一個視窗問你要 bind 到哪個 action 上了。

From Screenshots
From Screenshots

當建立好之後、存檔,然後 Build & Go 整個 Project,你可以看看在按下按鈕時,是不是在 Log 視窗就會出現訊息了呢?

  • wxPython 在 Mac 上是不是不行呀 XD

  • 沒用過耶 :p

    # 我以前對 wx* 系列不是很開心 XD

  • gasolin

    這會不會太容易了點呀 XD

  • keitheis

    (流口水) 不禁也想試試 Qt4 Designer 啊 XD

  • Xcode 自動生出來的 code 會有誤把 tab 替換為 space 的問題,有解決方法嘛?

  • @leafy
    去 Preferences… 裡面改,把 tab 用 space 展開