一直以來很想在 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
這會不會太容易了點呀 XD
(流口水) 不禁也想試試 Qt4 Designer 啊 XD
Xcode 自動生出來的 code 會有誤把 tab 替換為 space 的問題,有解決方法嘛?
@leafy
去 Preferences… 裡面改,把 tab 用 space 展開