tkinterライブラリでタスク管理ツールを作ってみる2

さてtkinterでGUIアプリを作る第二回です。

前回やった内容はこちら

今回は機能の追加をしていきたいと思います。

今の所自分で必要だと考えている機能一覧
・時間の表示を見やすくするなにか
・スタートストップのボタン

時間については時間を測ることができたらそれでおっけいなので
タイマーの形で表現できればいいかなと思います。
UIに関しては、ボタンを押すと表示する画像が変わって
一つのボタンでオンオフ切り替えられると嬉しい。


さて、それではボタンの実装から行います。
ボタンの定義の仕方はこんな感じです。

button_name = Button(text = “text”, command=関数)


ボタンにはクリックされた時に対応して関数を定義することができます。

関数を定義した場合は、そのボタンとイベントを結びつける必要があります。

button.bind(イベント内容, 関数)


イベント内容は以下の通りです。



次に時間を計測するために関数を定義していきたいと思います。

で、ここで問題が。
テキスト内容を今の時間にする関数を定義して1秒ごと呼び出す。
→更新しているうちに現在時刻からずれたりするのでは???

というわけで、大人しくtkinterライブラリを調べたところ下の関数が便利

after()

これを利用すると時間を計測するのは以下のように実装できます。
ちなみに、前回定義したものに関しては省いています。
(こちらを参考にさせていただきました→http://www.shido.info/py/tkinter3.html)

def __init__(self):
     
   #ラベルとボタンの定義
   self.label2 = 'START'
self.button_s = Button(text=self.label2, \
command=self.start_stop)
self.button_i = Button(text="input", \
command=self.file_input)
self.display = Label(textvariable=self.echo, \
  font=('Helvetica', '24'), bg='white', width=5)

   #grid
self.display.grid(row=1, column=1)
self.button_s.grid(row=4, column=1)
self.button_s.bind_all('<1>', self.start_stop)


def start_stop(self, event):
if not self.switch:
self.button_s.configure(text = 'STOP')
self.root.after(1000, self.count_time)
self.switch = True

else:
self.button_s.configure(text = 'START')
self.switch = False


def count_time(self):
  if self.switch:
  self.time += 1
  self.echo.set('%02d:%02d' % (self.time/60, \
self.time%60))
self.root.after(1000, self.count_time)


ここでの処理を説明していきます。
まず計測開始ボタンを定義します。

self.button_s = Button(text=self.label2,\
command=self.start_stop)


このボタンに関連付けるのはstart_stop関数(後述)です。
押すたびにラベルの切り替え(START ⇄ STOP)ができるようにします。

次にstart_stop関数です。
この関数では、二つの操作を行います。
①STARTとSTOPのラベルを切り替える
 self.switchのbooleanを切り替えることで、ラベルの文字を切り替えます。
②count_time関数を実行
 
最後にcount_time関数です。
この関数では時間の測定を行います。
self.switchがTrueの場合(時間計測を行う場合)、
カウントされた時間をechoに格納します。

この関数自体を1秒ごとに再帰的に呼び出すことで、
1秒ずつカウントされてGUI上に時間が表示されます。

今回はここまでにします。
というのも、これを動かすと1秒計測後にエラーが出る...
これを解決してから続きをあげたいと思います。

この記事へのコメント