なりなり日記

Appleと折りたたみ自転車(BROMPTON / Tern Vektron S10 / BESV PSF1)の情報を中心に発信中!

【Python入門】Pythonistaでタイマーを作る(1)


スポンサーリンク

こんにちは、なりなりです(^ ^)

Pythonista 3

Pythonista 3

  • omz:software
  • 仕事効率化
  • ¥1,220

さて、Pythonの基本的な文法がわかったところで、いよいよプログラミングします。

今回はiPhoneのPythonアプリ、Pythonistaでプログラミングです(^-^)


タイトル通り、タイマーを作るのですが、まずは基本的な

  • UIの作り方と使い方
  • 1秒毎にカウントダウンする方法

を勉強します。


最初のプログラムの完成形はこちら。

テキストボックスに数値を入れてSTARTボタンを押すと、0までカウントダウンします。

簡単そうですが、意外と苦戦しました(⌒-⌒; )

実験1

まずはインタラクティブモードで実験です。

要は、ループの中で1秒ウェイトがかかれば良いのですよね。

>>> from time import *
>>> times=10
>>> while times > 0:
...   print(times)
...   times -= 1
...   sleep(1)
...   
9
8
7
6
5
4
3
2
1

これは、timeモジュールの中のsleep関数を使ったものです。sleepの引数は秒です。

1秒毎に変数timesがカウントダウンされる様子が見れるので、これが使えると思いました。

実験2

実験1の方法にUIを組込んでみます。

ここで+ボタンを押して


Script with UIを選び


ファイル名を入れたらCreateを押すと


ソースファイル.pyとUIのデザインファイル.pyuiが生成されます。


こちら、.py


こちら、.pyuiです。

まず、.pyuiで+ボタンを押して


Text FieldウィジェットとButtonウィジェットを配置します。ドラッグして、位置とサイズを適当に調整したら、ウィジェットを選択した状態で右上のiボタンを押してプロパティを編集します。


ここでは、Text FieldのTextとButtonのTitleを編集したら、再びiボタンを押します。


するとこうなって、取り敢えずUIは完成!

あ、いや、もう1つ、ButtonのActionにbutton_tappedを入力します。これは、ボタンを押した時に実行する関数名です。

import ui
import time

def button_tapped(sender):
	textfield = sender.superview['textfield1']
	
	times = int(textfield.text)
	
	while times > 0:
		time.sleep(1)
		times -= 1
		textfield.text = str(times)
		
v = ui.load_view()
v.present('sheet')

.pyのソースコードは、この様に変更します。


ボタンをタップした時に呼ぶ関数button_tappedは引数にsenderを持たせます。

sender.superview['textfield1']によって、sender(Button)の外のスコープにあるtextfield1という名前のウィジェットを返します。

これのTextプロパティにtimes変数をカウントダウンしながら代入するプログラムなのですが、


スタートボタンを押すと表示が固まってしまい。


カウントダウンが終わると、ようやく表示が更新されます。


うーん、これではダメだ。
ウィジェットの表示を定期的に更新するには、他の手段が必要な様です。

といことで、次回に続きます。


【Python入門】Pythonistaでタイマーを作る(2) - なりなり日記

続きはこちら!