MacPythonについてのページ(よ)>
Python(MyApp) で Mac アプリケーションを作る|目次

第3回 speakwin モジュールを書く(2)


このページの目次

Win クラスに入力フィールドを追加
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.prompttext = W.TextBox((10,10,50,22), text = 'Input:')
最初の引数 (10,10,50,22) はウィンドウ内のポジション/サイズ(ウィンドウの左端から10、上端から10、幅50、高さ22)、text = 'Input:' は表示するテキストです。fontsettings も設定できるのですが、省略できて、この場合はウィンドウの fontsettings が使われるようです。
self.text = W.EditText((60,10,140,22))
テキスト入力のための入力フィールドです。引数はポジション/サイズです。
上の self.prompttext もそうですが、ポジション/サイズはいろいろ数値を変えて、表示してみて決めました。

追記した行は self.open() の行のあとに書いてもいいのですが、それだと真っ白なウィンドウが現れてからテキストなどが描画されるので、上の順序にしました。

ここで、MyApp.py を実行してみると(speakwin.pyを保存して、MyApp.pyをPythonInterpreterにドロップします)、以下のようになります。

入力フィールドまで作ったウィンドウ

Win クラスにボタンを追加

次に、ボタンを作ります。このボタンを押すと、テキストフィールドの内容を話す、というものです。

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())
------------------------------------

次回はボタンをデフォルトにしたり、小さな修正を...


<▲このページのTOPへ>
戻る   次へ
Python(MyApp) で Mac アプリケーションを作る|目次
MacPythonについてのページ(よ)トップへ

by ©Hioryuki Yoshimura, 2002-2004.
Last modified at 2004/1/28