iOS上で動作する革命的ものづくり環境「Pythonista 3」の魅力をとくと語る
2016/12/29
価値ある情報をユーザー視点で発信するブログ
2016/12/29
もくじ
w00t! Pythonista 3 supports split-screen mode on iPad and has extended keyboard. pic.twitter.com/XJMklAQipe
#!/usr/bin/env python # -*- coding: utf-8 -*- import matplotlib.pyplot as plt import matplotlib X = [1,2,3] Y = [3,1,4] plt.bar(X,Y, align="center") plt.xticks(X, [u'Tokyo',u'Osaka','Fukuoka']) plt.show()
@stroughtonsmith Seriously, check out StaSh for Pythonista. https://t.co/Rqo9kUFRla. It's awesome. pic.twitter.com/XGHo8nfgrD
import ui import console def button_tapped(sender): sender.title = "Baka" console.alert("Pushed") v = ui.load_view() v.present('sheet')
import console console.alert("Hello, Pythonista!")﹁im﹂まで入力すると補完候補に﹁import﹂が出てくるのでそれを選ぶ、といった感じでPythonista 3の入力支援機能の助けを借りて、ソフトウェアキーボードでもなかなかスピーディーにスクリプトが書けます。
import photos p = photos.pic_image() p.show()
import photos from PIL import ImageFilter p = photos.pick_image() p2 = p.filter(ImageFilter.FIND_EDGES()) p2.show()
import sys
import editor
# 日本語処理のためデフォルトエンコーディング設定
sys.setdefaultencoding('utf-8')
# Pythonistaのコードエディタ上で選択されたテキストを取得する
def selected_text():
text = unicode(editor.get_text(), 'utf-8')
selection = editor.get_selection()
selected_text = text[selection[0]:selection[1]]
return selected_text
選択中のテキストを加工して、選択中のテキストと置き換える、などといったアクションが作れます。
PythonistaではPythonスクリプト以外にも、テキストファイル、HTMLファイル、JavaScriptファイルなどをコードエディタで開いて編集できるので、テキストファイルの編集を中心とした作業環境、拡張可能なエディタとして使うこともできます。
# coding: utf-8 import qrcode import appex def main(): if not appex.is_running_extension(): print 'This script is intended to be run from the sharing extension.' return url = appex.get_url() if not url: print 'No input URL found.' return print url img = qrcode.make(url) img.show() if __name__ == '__main__': main()これだけのコード量で、立派に機能するExtensionが作れています。 appexモジュールのドキュメントを見ると、さまざまなメソッドが用意されていることが分かります。 ●appex — Using the Pythonista Sharing Extension Open In…で受け取ったファイルは、 appex.get_attachments() や appex.get_file_path() で保存先のパスが受け取れます。任意のファイルを処理できて、用途が広がります。 以下は、Open In…で受け取ったファイルをPythonista 3の管轄ディレクトリに保存するものです。
# coding: utf-8 import appex, os, console def save(): if appex.is_running_extension(): sFp = appex.get_file_path() if sFp: console.hud_alert('Saving...') with open(sFp, 'rb') as f1: with open(os.path.basename(sFp), 'wb') as f2: f2.write(f1.read()) console.hud_alert('Saved') if __name__ == '__main__': save()出典: [Share Code] Extension to save attachment
# -*- coding: utf-8 -*- import webbrowser import urllib2 import sys sys.setdefaultencoding('utf-8') mes = urllib2.quote("ほげ") webbrowser.open("tweetbot:///post?text="+mes)●webbrowser
# coding: utf-8 '''Simple demo of using UIDevice to query the current battery state''' from objc_util import * UIDevice = ObjCClass('UIDevice') device = UIDevice.currentDevice() battery_states = {1: 'unplugged', 2: 'charging', 3: 'full'} device.setBatteryMonitoringEnabled_(True) battery_percent = device.batteryLevel() * 100 state = device.batteryState() state_str = battery_states.get(state, 'unknown') print 'Battery level: %0.1f%% (%s)' % (battery_percent, state_str) device.setBatteryMonitoringEnabled_(False)
# coding: utf-8 from objc_util import * UIApplication = ObjCClass('UIApplication') # Pythonista自身のインスタンスを取得 app = UIApplication.sharedApplication() # Pythonistaのウインドウを取得 win = app.windows()[0] # ビュー構造を再帰的にダンプ win.recursiveDescription() # ウインドウの透明度を設定 win.alpha = 0.5 # Pythonista内のクラスの取得 PythonistaWindow = ObjCClass('PythonistaWindow') # インスタンス生成 pywin = PythonistaWindow.alloc()﹁site-packages/pythonista_startup.py﹂︵もしくはsite-packages2、site-packages3ディレクトリ以下のpythonista_startup.py︶が起動時に初期化スクリプトとして自動的に実行されるので、ここに何らかのPythonista 3に対する変更を書いておくと、それを恒久的なものにできます。 Objective-CのMethod Swizzlingの手法を利用し、既存のクラスの挙動を変更することも可能です。 ●[参考] jsbain/objc_hacks: experiments with pythonista objc module
# coding: utf-8 from objc_util import * ObjCClass('NSBundle').bundleWithPath_('/System/Library/Frameworks/Speech.ramework').load() SFSpeechRecognizer = ObjCClass('SFSpeechRecognizer')●[参考] Siri SDK! | omz:forum かようにObjective-Cとのブリッジ機能は強力で、何でもありです。 iOS上の様々な機能を、Appleの審査を通さず、いつでもどこでも思った時に利用可能なところが痛快です。 App Storeで流通するアプリにはできないことが、Pythonista 3用のスクリプトではできる、ということが多々ありうるわけです。
I've started working on an actual debugger for Pythonista. It's not quite done yet, but here's a sneak peek: pic.twitter.com/tC18oS4e4r
@olemoritz ...it also supports debugging UIs. pic.twitter.com/FvJKgiMtG4