.. title:: Pythonで心理実験 - 例題5-5 例題5-5:ここらでひとつ系列位置効果でも ========================================== **A:** このところ心理実験でもなんでもない短いサンプルばかりが続いたので、 例題5の締めくくりにひとつ系列位置効果の実験プログラムを掲載しておこう。これは昔実験実習用に書いたもので、 受講生が解答用紙と筆記用具を持ってPCの前に座って実行し、各自で答え合わせすることを想定している。 **B:** 答え合わせも受講生にやらせるんですね。手抜きだなあ。 **A:** いや、受講生の数にもよるが、そんなの教員がやってたら講義時間中に終わらんぞ。 プログラムとしては、実験の本体はキーが押されたら次の刺激を表示するか一定時間経過したら表示するかの違いだけで、 リーディングスパンテストの実験と大して変わらない。今回、このプログラムを引っ張り出してきたのは、Tkinterで フォントを指定したり、エディットボックスに文字列の初期値をセットしたり、チェックボタンを使ったり、 ラベルの文字列を引数で与えたりといったテクニックのサンプルになると思ったからだ。 敢えて詳しい解説はつけないので、例題1から例題5のまとめとして各自で読んでみてほしい。 **B:** とかいって、単に解説を書くのが面倒くさいんじゃないんですか? **A:** 面倒くさいというか、なかなか時間がないんだよ。ホント。 いつか時間ができたらきちんと書きなおしたいね。 **B:** その日は永遠に来ないに3000点。 **A:** むっ。でも正直自分でもそうかも知れんと思う。一部に例題1から5で 全く紹介していないクラスなどを使っているので、それだけ簡単に解説しておこう。それでは検討を祈る。 .. csv-table:: :delim: $ Tkinter.StringVar().set()$Tkinter.StringVar()にあらかじめ値を設定しておく方法のサンプルです。 tkMessageBox$簡単なメッセージダイアログを表示するためのモジュールです。 ここでは指定したファイルをオープンできなかったときのエラーメッセージ表示に使用しています(31行目)。 sys.exit()$プログラムをその場で終了させるメソッドです(32行目)。 datetime$日付や時間のデータを操作するためのモジュール。 35行目ではdatetimeモジュールに含まれるdatetimeクラス(ややこしい…)のnowメソッド()で現在の日時を取り出し、strftime()メソッドで 文字列に変換しています。詳しくはPythonライブラリリファレンスを参照してください。 CheckWindowクラス$Tkinter.Frameを継承して系列位置効果の答え合わせ ダイアログを作成しています(140行目から)。フォントの大きさや種類を指定したり、Tkinter.IntVarとTkinter.CheckButtonを使って チェックボタンを作成したり、ラベルの文字列を引数で与えたりするなど、例題5-3や5-4よりもう少し踏み込んだTkinterの使い方のサンプルです。 unicode.encode()$テキストファイルに日本語を出力するとき、文字コードが原因の トラブルが起こることがあります。234行目では普通にr[2]とすると文字列を出力できないと言って怒られるので、encode()というメソッドを 用いて文字コードを指定しています。Shift JIS以外の環境で使用されている方は、それに合わせて変更する必要があります。 break$現在のforやwhile文によるループを強制的に中断します。 例題4-2で出てきたcontinueと似ていますが、中断された後はループの次の行へ処理が進みます。このサンプルではESCキーで強制的に先の画面に進むために使用しています。 補足(2012/10/31) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 05-5.pyではTkinter.Labelなどのウィジェットに毎回font=('Helvetica', '12')という引数を与えてフォントを指定していますが、ダイアログ内のすべての要素に対して同じ文字を設定する時にはoption_addというメソッドが使えます。 以下05-5.pyの11行目から22行目をopion_addを使って書き直した例を示します。 :: class FileWindow(Tkinter.Frame): def __init__(self,master=None): Tkinter.Frame.__init__(self,master) #self.masterのoption_addというメソッドですべてのフォントをHelveticaの12ポイントに self.master.option_add('*font', ('Helvetica', 12)) self.FileNameEntry = Tkinter.StringVar() self.FileNameEntry.set('.txt') #個々のウィジェットでfont=...を設定する必要がない Tkinter.Label(self,text=u'ファイル名').grid(row=0,column=0,padx=5,pady=5) Tkinter.Entry(self,textvariable=self.FileNameEntry).grid(row=0,column=1,padx=5,pady=5) Tkinter.Button(self,text=u'OK',command=self.quit).grid(row=1,columnspan=2,ipadx=15,pady=5) self.pack() + 行番号なしのソースファイルをダウンロード→ `05-5.py `_ .. literalinclude:: source/05-5.py :language: python :encoding: shift-jis :linenos: :lineno-match: