こんにちは、なりなりです(^ ^)
【Python入門】Pythonistaでタイマーを作る(2) - なりなり日記
Pythonistaでのタイマーの使い方を勉強しましたが、一度脱線して、PCならどうするのか?やってみます(^-^)
TKと聞けば、プラグラムに詳しい人はピンと来ますよね、きっと。僕は知りませんでしたけど。
PythonにはGUIを構築するためのモジュールTKが標準で組み込まれているのです。
僕はGUIとかイベントドリブン型のプラグラムは、ポーランドのC++ Builder(Visual BASICのC++版といいましょうか)でしか組んだことが無いので、ソースコードだけで書くというのがピンと来ないんです(⌒-⌒; )
tkinkerを使ったタイマーの例がこちら。
# coding: utf-8 from tkinter import * def timer(): time = int(buff.get()) if time > 0: frame.after(1000, timer) time -= 1 buff.set(str(time)) frame = Tk() buff = StringVar() buff.set('10') entry = Entry(frame, textvariable = buff) entry.pack(side='left') button = Button(frame, text = 'START', command = timer) button.pack(side='right') frame.mainloop()
一番上の方に定義したtimer関数の中に有りますが、tkにはthreadingのTimerに似たメソッドafterが有るので、threadingは不要です。
今回は、tkinkerの中のテキスト入力ボックスのEntryとButtonのウィジェットを使います。
では、インタラクティブモードでウィジェットが出来上がる様子を見ましょう!
frame = Tk()
でtkのインスタンスframeを生成し
buff = StringVar() buff.set('10')
tkのウィジェットと文字列をやりとりするにはStringVarでインスタンスを生成します。ここではsetメソッドで10に初期化。
entry = Entry(frame, textvariable = buff) entry.pack(side='left')
frame上にEntryのインスタンスを生成し、textvariable(変化する文字列)にbuffを関連付けてから、frameに詰め込んで表示(pack)します。この時、Entryは左に配置。
するとこうなります。
更に、
button = Button(frame, text = 'START', command = timer) button.pack(side='right')
Buttonのテキストに「START」を指定して、ボタンを押した時のコール関数に「timer」を紐付けて、frame上にインスタンスを生成します。Buttonは右に配置。
するとこうなり、mainloopの実行でボタン押し待ちの状態になります。
こんな感じに、ソースコードだけでGUIとかイベントドリブン型のプラグラムとか作れるんですね。
実は、この辺の感覚が無かったので
初めてのGARMIN Connect IQプログラミング vol.3【基礎編】 - なりなり日記
GARMIN Connect IQのプログラミングが暗礁に乗り上げてしまったのですが、ひょっとして再開出来るかも!
追記
Windows上で.pyをPythonに関連付けてある場合、ダブルクリックでプログラムが起動しますが、同時にShell Windowが開いてしまって鬱陶しいです。
この場合、拡張子を.pywにするだけで解決します!
.pyはpython.exeに、.pywはpythonw.exeに関連付けられていることに依るようですが、詳細は分かりません(⌒-⌒; )
VBS(Visual BASIC Script)を使う手も有るようですが、拡張子変更の方が遥かに簡単ですね(^-^)