全功能的 Pythonista
Python 是一個簡單、全功能、強大的程式語言, 使用 Python 的人很自然會希望在任何地方都可以寫 Python 程式。一開始可能覺得, 「要是在 iOS 上有個寫 Python 的 App 就 好了, 我可以算一些簡單的東西。」現在這種 App 其實不少, 但你會發現在編輯器的使用也好, 功能上也好, 其實很難讓你有想在 iPad 或是 iPhone 上寫 Python 的衝動。因為我們也許會希望:
就是寫 Python 程式, 但要容易編輯、儲存、取用。
要可以呼叫其他 App, 完成一些自動化的工作, 比如說傳簡訊給三個同組的伙伴, 自動找十個網頁整理出結果放到 Evernote 裡等等。
可以簡單畫圖的工具, 也許可以來個函數圖形什麼的。
繼然都這樣了, 那是不是自由可以放插圖、照片, 還可以處理一下的更好。
所以說不定可以做個 iPad 遊戲了?
都到這種程度了, 是不是 iPad 的觸控啊、轉來轉去也要可以偵測使用?
好像越要越誇張, 但 iPad/iPhone 上真的有這樣的 Python 開發環境嗎? 結果真的有! 叫做 Pythonista。
自動化的工作
Pythonista 可以透過 URL Schemes 去呼叫別的 App, 甚至支援 x-callback-url 也就是叫別的 App 做點東西再回傳回來。因此, 可以做許多的自動化工作。你真的可以讓 iPad 上寫 Python 不是玩玩而已, 完全是可以配合你的需要, 簡化你的工作。這方面 Federico Viticci 有篇很棒的文章, “Automating iOS: How Pythonista Changed My Workflow" 可以參考。
假裝一個獨立的 App
你用 Pythonista 寫的程式, 可以輸出成 Xcode 的專案, 最後你再做調整也許 (因為我還沒試過) 可以完成一個獨立執行的 App, 現在我們要做的不是這個。我想很多人知道, 在 Safari 「匯出」的功能中, 有個「加入主畫面」的功能。這可以把你常去的網站, 匯出成一個 App 的樣子, 你每次點 App 就是那個網站。
現在因為 Pythonista 支援了我們剛剛說的高級 (?) URL Scheme, 如果我們用 Pythonista 寫了個叫 “MyScript" 的程式, 在 Safari 輸入網址的地方打入:
pythonista://MyScript?action=run
就可以直接執行了! 所以, 我們只要把這「加入主畫面」不就有個「假」獨立 App 了嗎? 一切都很美好, 除了你會發現你根本沒機會輸出, 因為打入上面那一段話, 你馬上會跳到 Pythonista。不過, 我們好心的作者已幫你想好, 你只要用 iPad 連到下面這個網頁,
打入你的程式名稱, 比如說 “MyScript", 如果要直接執行就在 Arguments 欄位打入 run。然後就會提示你, 可以把這一頁「加入主畫面」了!
圖形、聲音
Pythonista 有兩個主要圖形模組, 分別是 scene 和 canvas。其中 canvas 就是畫圖, 基本上是不互動的圖形顯示, 而 scene 是有互動功能的。我們這裡略略秀一下 scene 的簡單用法, 你就會發現 Pythonista 真的很容易使用。
scene 模組的基本架構如下:
from scene import *
class MyScene(Scene):
def setup(self):
# 這裡做畫圖前的設定
def draw(self):
# 這裡真的畫圖, 每秒約更新 60 次
run(MyScene()))
# 執行
是不是很簡單? 我們現在想做一個簡單的程式, 就是在 iPad 上我們按下去的地方, 就顯示「你按我!」這三個字。在我們這個物件下所有觸碰的認知都會放在 self.tocuhes.values() 裡面, 每個觸碰當然會知道 x 和 y 座標的位置。於是我們可以
# -*- coding: utf-8 -*-
from scene import *
class MyScene (Scene):
def draw(self):
background(0, 0, 0)
fill(1, 0, 0)
for touch in self.touches.values():
text('你按我!', font_name='Helvetica', font_size=100, x=touch.location.x + 50, y=touch.location.y + 50, alignment=5)
run(MyScene())
這樣就寫好了! 你可以試試。除了觸控的部份, 加背景顏色設 (0,0,0) (RGB 黑色), fill 是之後所有圖形物件 (我們的文字) 顏色 (這裡設白色)。最前面的 UTF-8 設定我想寫過 Python 中文程式的都知道, 等等, 中文! 對, scene 圖形模組中文可以直接顯示! 還有很酷的是, 我們剛剛說「所有觸控」, 沒有人規定只能單點觸控…
有些東西我們之後再來介紹, 這裡先再加個聲音, 讓我們知道 Pythonista 方便的地方。我們要加聲音, 可以加入聲音模組:
import sound
然後比如我們想放「內建」的 ‘Coin_1’ 聲音, 就
sound.play_effect('Coin_1')
即可! 我們的程式如果改成這樣, 那每次按都會發出聲音來。
# -*- coding: utf-8 -*-
from scene import *
import sound
class MyScene (Scene):
def draw(self):
background(0, 0, 0)
fill(1, 0, 0)
for touch in self.touches.values():
text('你按我!', font_name='Helvetica', font_size=100, x=touch.location.x + 50, y=touch.location.y + 50, alignment=5)
sound.play_effect('Coin_1')
run(MyScene())
請按讚:
喜歡 正在載入...
相關