Pythonアプリ(2):クリッカーを作ろう
クリッカーを作ろう
今回は、10秒間でボタンがクリックされた回数を表示するアプリを作ってみます。単純な仕組みですが、タイマーを付けたり工夫すると楽しいものになります。
前回まで
from tentoapp import *
app = App()
b = Button(app)b.text = "クリックして"b.pack()
app.start()
実行結果
ボタンのアクション
現在はボタンが表示されるだけで、ボタンを押しても何も変わりません。 そこで、ボタンを押したら「クリックしたよ!」という表示が出るようにします。以下のようにコードを変更しましょう。
from tentoapp import *
def click(): print("クリックしたよ!")
app = App()
b = Button(app)b.text = "クリックして"b.onclick = clickb.pack()
app.start()
変更箇所
def click(): print("クリックしたよ!")
まず、 click
という 関数(かんすう) を追加します。関数は、プログラムをまとめて名前をつけたものです。今回は、「クリックしたよ!」という文字を出すだけの関数です。 def
は デフ と読みます。「定義する」という意味です。
b.onclick = click
ここでは、ボタンが押されたときに動くもの(onclickオンクリック)としてさきほど作ったclick関数を割り当てています。
実際にプログラムを実行してボタンをクリックすると、このように実行する側の画面に文字が表示されます。
回数を表示するラベルの追加
次に、クリックした回数を表示できるようにします。
from tentoapp import *
def click(): print("クリックしたよ!")
app = App()
l = Label(app)l.text = "0"l.pack()
b = Button(app)b.text = "クリックして"b.onclick = clickb.pack()
app.start()
変更箇所
l = Label(app)l.text = "0"l.pack()
回数を表示するラベルを追加しています。
クリックしたら数字が増えるようにする
このままだといくらクリックしても数字が0のまま変わらないので、クリックしたら数字が増えるようにします。
from tentoapp import *
count = 0
def click(): global count count += 1 l.text = count
app = App()
l = Label(app)l.text = "0"l.pack()
b = Button(app)b.text = "クリックして"b.onclick = clickb.pack()
app.start()
変更箇所
count = 0
まず、クリックした回数を記録するためにcountという変数を用意します。countは最初は0にしなければならいので、 count = 0
というふうにcountの中身を0にしています。
def click(): global count count += 1 l.text = count
次に、クリックしたときに呼び出されるclick関数を修正して、countが増えるようにします。 count += 1
は、 count = count + 1
と同じで、countを1増やすという意味です。そして、 l.text = count
でラベルの表示文字をこのcountにしています。
global宣言
ここでは、 global count
が一番わかりにくいところでしょう。
実は、pythonの関数では、関数の外側で定義された変数の中身を変えることができません。そこで、global宣言(グローバルせんげん)をして関数の中でもcountの値(あたい)を変更できるようにしています。
ちなみに、関数などの外側で宣言された変数のことを グローバル変数 といいます。
タイマーを追加する
今の段階でもクリックすると数字が増えますが、ただ増えるだけだとつまらないですね。そこで、タイマーを付けて10秒間でクリックできなくなるようにします。これでクリック数の競争ができます。
from tentoapp import *
count = 0stop = False
def click(): global count, stop if stop == False: count += 1 l.text = count
def end(): global stop stop = True
app = App()
l = Label(app)l.text = "0"l.pack()
b = Button(app)b.text = "クリックして"b.onclick = clickb.pack()
app.after(10000, end)app.start()
変更箇所
stop = False
def end(): global stop stop = True
まず、終了したかどうかを表す変数stopを追加して、値(あたい)を False (フォールス)にしておきます。Falseは「ちがう」という意味なので、 stop = False
は「ストップしてない」ということをあらわしています。
次にstopを True (トゥルー)にする end()
関数を用意します。Trueは「正しい」という意味なので、 stop = True
は「ストップした」ということをあらわしています。
def click(): global count, stop if stop == False: count += 1 l.text = count
click()
関数もこのように修正します。if文を用い、stopがFalseのときだけcountを増やすようにします。
app.after(10000, end)
もうひとつ最後に、 after(アフター)命令 を呼び出します。これは、指定した時間のあとに関数を実行させるという命令です。ここでは、10000ミリ秒後、つまり10秒後にend関数を実行するように設定しています。
やってみよう!
1. 表示をリッチに☆
いまは数字が表示されるだけですが、 10回クリック!
というような表示に変えてみましょう。
2. スタートボタンを作ろう☆☆
スタートボタンを作って、スタートボタンをクリックしてから始まるようにしよう。一回タイマーが終わっても、またスタートボタンをクリックすると新しく始められるようにします。
3. 最高点を表示しよう☆☆
最高点が表示されるように変えてみよう。最初の最高点は0点ですが、二回目からは最高点が記録されるようにします。