Win クラスに入力フィールドを追加
Win クラスにボタンを追加
いよいよ話させてみよう
ここまでのまとめ
ウィンドウ内にテキストボックスやボタンなどのウィジェットを配置していきます。
それには、W.Windowクラスを継承したWinクラスのメンバ変数としてテキストボックスやボタンのインスタンスを定義します。すると、Winのウィンドウ内に表示してくれます。
まず、文字を入力するためのテキストフィールドを作ります。Wウィジェットのリファレンスの Text Widget クラスの EditText を使います。入力できないただの文字列を表示するには TextBox を使います。ついでなので、その TextBox も使って、「Input:」みたいなプロンプトの文字を表示しておきます。
speakwin.py ------------------------------------ import W class Win(W.Window): #メインウィンドウのクラス def __init__(self): #ウィンドウを表示 W.Window.__init__(self, (10, 40, 250, 180), 'SpeakText', fontsettings = ('Osaka',0,12,(0,0,0))) self.prompttext = W.TextBox((10,10,50,22), text = 'Input:') #追記 self.text = W.EditText((60,10,140,22)) #追記 self.open() ------------------------------------
追記した行は self.open() の行のあとに書いてもいいのですが、それだと真っ白なウィンドウが現れてからテキストなどが描画されるので、上の順序にしました。
ここで、MyApp.py を実行してみると(speakwin.pyを保存して、MyApp.pyをPythonInterpreterにドロップします)、以下のようになります。
次に、ボタンを作ります。このボタンを押すと、テキストフィールドの内容を話す、というものです。
self.text = W.EditText((60,10,140,22)) の次の行に、以下の行を追記します。
------------------------------------ self.speakbutton = W.Button((90, 60, 60, 22), title = 'Speak', callback = self.speak) ------------------------------------
ボタンの最初の引数 (90, 60, 60, 22) はポジション/サイズ。title はボタンに表示されるテキスト(指定しない場合、「button」と表示されます)、callback は押された時に呼び出されるメソッドです。詳しくはWウィジェットリファレンスのコントロールの冒頭にボタンの説明があります。
callback の関数として、押された時に呼び出される->「押されると行う動作」と考えて、 self.speak という名前にしておきました。これを定義しなければなりません。ここまでのままで MyApp.py を実行すると、「self.speak が定義されてません」というエラーが出ます。
self.speak としてるので、Win クラスのメソッドとして speak メソッドを定義します。(っていうか、Win クラスのメソッドでなかったら、下のように self.text.get() を使って入力フィールドの内容を得ることができません。)
------------------------------------ def speak(self): import macspeech macspeech.SpeakString(self.text.get()) ------------------------------------
MacPython のモジュール macspeech を使って、Macの Speech マネージャの機能を呼び出しています。
難しいことは私はわかりませんが、
macspeech.SpeakString( text )
で、text を話すそうです。Speech コントロールパネルで設定された音声で話します。詳しくは Python ドキュメントの Macintosh Library Modules の macspeech に説明があります(Python2.3のドキュメントではmacspeechの文書がなくなっています。pydocなんかで調べることができます)。こういうのは使いたい機能がわかればいいだけなので、私は詳しくは知りません。
self.text.get() は self.text のテキストを返します。入力フィールドに入力されたテキストを返すわけです。
これで基本的な機能はできたので、起動してみましょう。
あせらないで!MyApp.py を Python インタープリタで実行するんですよ。MyApp.py をダブルクリックするか、PythonInterpreter にドロップします。speakwin.py をダブルクリックしちゃいけません。
入力フィールドに何か適当な文字を入力し、「Speak」ボタンを押すと、話します。
Speech コントロールパネルの設定が「ひろし」「まさこ」で英単語を入力したり、Kathy さんとかで日本語を入力すると、ちゃんと話してくれません。やってみてください。
speakwin.py のここまでの内容は以下のようになります
------------------------------------ import W class Win(W.Window): #メインウィンドウのクラス def __init__(self): #ウィンドウを表示 W.Window.__init__(self, (10, 40, 250, 180), 'SpeakText', fontsettings = ('Osaka',0,12,(0,0,0))) self.prompttext = W.TextBox((10,10,50,22), text = 'Input:') self.text = W.EditText((60,10,140,22)) self.speakbutton = W.Button((90, 60, 60, 22), title = 'Speak', callback = self.speak) self.open() def speak(self): import macspeech macspeech.SpeakString(self.text.get()) ------------------------------------
次回はボタンをデフォルトにしたり、小さな修正を...