まえがき
リストボックスを作る
リストボックスのテキストを話す
まとめ
11回で終わらせてしまいましたが、回数や文章が長い割にあまり内容が無かったかもしれません。11回目まではイッキに作ってしまったので、わたしのパワーもイッキに無くなってしまいました。
それで、少しづつですが再開することにしました。お付き合いのほどよろしくお願いします。
ウィンドウにリストボックスを加えて、それを選択するとテキストボックスの中に表示されるようにしてみます。
前回までにできたはアプリケーションのウィンドウは以下のようになっています。
ウィンドウを広げてリストボックスを表示できるようにしてみます。
前回までのspeak8.sit.bin(約 30k)に書き加えていきます。
speakwin.py 変更前:12、20-22 ---------------------------------------------- W.Window.__init__(self, (10, 40, 250, 180), 'SpeakText', fontsettings = ('Osaka',0,12,(0,0,0))) ・ ・ ・ self.speakbutton = W.Button((90, -32, 60, 22), title = 'Speak', callback = self.speak) self.open() ---------------------------------------------- 変更後:12、20- ---------------------------------------------- W.Window.__init__(self, (10, 40, 250, 350), 'SpeakText', fontsettings = ('Osaka',0,12,(0,0,0))) ・ ・ ・ self.speakbutton = W.Button((90, -32, 60, 22), title = 'Speak', callback = self.speak) self.text = ['Hello!, again'] #この行を追記 self.listbox = W.List((20,120,200,140), items = self.text) #この行を追記 self.open() ----------------------------------------------
W.Window.__init__(self, (10, 40, 250, 350), 'SpeakText', fontsettings = ('Osaka',0,12,(0,0,0)))
リストボックスを表示するために、ウィンドウを少し大きくしました。
self.text = ['Hello!, again']
self.listbox = W.List((20,120,200,140), items = self.text)
W.List でリストボックスを作ります。items = [] でリストボックスに表示される項目をリストで設定します。ここでは、'Hello!, again' という文字列1つだけをリストに表示される項目としています。
self.text = ['Hello!, again']
として self.text というインスタンス変数にしました。
上のように speakwin.py を訂正して保存し、MyApp.py を実行すると以下のようになります。
今度はリストボックスの項目を選択すると、それがテキストボックスに表示されるようにします。
speakwin.py 変更前:23- ---------------------------------------------- self.listbox = W.List((20,120,200,140), items = self.text) ---------------------------------------------- 変更後:23- ---------------------------------------------- self.listbox = W.List((20,120,200,140), items = self.text, callback = self.settext) ・ ・ ・ (『def do_key(self): 』のメソッドのあと、一番最後に追記) def settext(self, event): if event == 1: selectedtext = self.listbox.getselection() for i in selectedtext: self.textaria.editor.set(self.text[i]) ----------------------------------------------
self.listbox = W.List((20,120,200,140), items = self.text, callback = self.settext)
コールバックとして、self.settext を加えました。リストボックス内でクリックすると、self.settext が呼び出されます。
def settext(self, event):
...したがって、self.settext を定義します。リストボックスのコールバックで呼び出されるメソッドは引数を一つ取る(というか、関数へ引数をひとつ渡す)ので、event という引数で受け取ることにします。
if event == 1:
その受け取る引数というのは、リストボックス内で項目をダブルクリックすると、1 だそうです(W ウィジェットリファレンスのリストを参照して下さい)。もしダブルクリックされたら...
selectedtext = self.listbox.getselection()
選択されたリストボックスの項目を selectedtext に代入します。注意しなければならないのは、getselection() は選択された項目の添字(数値)のリストを返す、ということです。
つまり、「Hello!, again」を選択してダブルクリックすると、selctectext には [0] というリストが代入されます。
for i in selectedtext:
そのため、selectedtext リストの中の項目をひとつづつ選択するために、for ループで対応することにします。selectedtext のリストの項目について...
self.textaria.editor.set(self.text[i])
その添字にあたる項目を self.text から添字付けで取り出し、取り出したテキストを self.textaria.editor に表示します。
以上のようにして、MyApp.py を実行し、リストボックス内の「Hello!, again」をダブルクリックすると、以下のようになります。
以上の結果をまとめた speak9.sit.bin(約 30k)を作りました。
次回は、リストボックスに表示する内容をファイルに保存しておいて、そこから読み込むようにします。(たぶん)
何か誤りやご質問、お気付きの点、ご意見やご不満などございましたら、メールで、もしくはMacPython BBS(よ)へ書き込んでいただければ幸いです。