|
カテゴリ:Python
wxPython.org の Getting Started をサカナに第七弾。これまでテキストコントロール (wx.TextCtrl) に文字を表示し、文字色や背景色を変更したり、表示フォントを変更してみた。そして、メニューやステータスバーを付け、さらにメニューイベントに対応した処理をバインドしてというところまでやった。今回は、イベントハンドラーのメソッドの中に少し処理を入れてみる。ひとつは、プログラムを終了するという単純なところと、もうひとつはダイアログを出すところ。Getting started with wxPython でいうと、2.3 から 2.4 のあたり。全部で 12項目あるのでまだまだこのネタは続くのであった。さらに次のネタもみつけてあるので、当面 wxPython 入門は続きそう。
wxPython のプログラムを終了するwxPython で書かれたプログラムを終了するには、コマンドラインから起動した場合には、コマンドライン上で Ctrl-C を入力して強制的に終了させるかw、ウィンドウの右上の × をクリックして終了させることもできる。でも、ちゃんとプログラム独自に終了させることもできるようにしましょうということで、[ファイル]メニュー - [終了] を選択するとプログラムが終了できるようにする。 これはいたって簡単。メニューを選択したときに、イベントハンドラーの中で、ウィンドウ(Frame) を Close(True) してやればよい。それだけ。次のものは、単純にするために必要な箇所だけのコード。
終了を選択するとあっさりと、プログラムは終了する。 ダイアログを表示する[ヘルプ]メニュー -[バージョン情報] を選択すると、About ダイアログが表示されるようにしてみる。 これも同じようにメニューイベントのハンドラを書いてあげる。前回のwxPython (6) (5) のソースコードをベースに追加修正する。 ダイアログを表示するのは、wx.MessageDialog。引数は、messageDialog(parent=None, message='', caption='Message', style = wx.OK | wx.CANCEL | wx.CENTRE, pos=wx.DefaultPosition) 。
ダイアログのスタイルで、style= wx.YES_NO とすれば、「はい」と「いいえ」のボタンが表示される。何も指定しなければ、style=wx.OK|wx.CANCEL|wx.CENTRE が指定されたのと同じことになるので、「OK」 と 「キャンセル」ボタンが表示される。 スタイル (style) は、wx.OK、wx.CANCEL、wx.YES_NO と wx.YES_DEFAULT、wx.NO_DEFAULT、さらに、wx.ICON_EXCLAMATION、wx.ICON_INFORMATION、wx.ICON_HAND, wx.ICON_ERROR, wx.ICON_QUESTION, wx.ICON_INFORMATION, wx.STAY_ON_TOP を組み合わせて指定可能。アイコンの種類を変更したいときは、たとえば、wx.OK| wx.ICON_ERROR と | でつないで指定してやればよい。デフォルトは、ICON_INFORMATION。wx.STAY_ON_TOP を付けてやると、ダイアログが常に一番上のウィンドウとして表示されるので、他のプログラムのウィンドウの下に隠れてしまうということがなくなる。 MessageDialog では、Frame やメニューを作るときと違って引数に ID が指定されていないが、これは内部で自動的に id = wx.ID_ANY(実際は -1 だったりもする)で、自動的に ID が割り当てられているから。 一番単純には、wx.MessageDialog(self, "メッセージ") だけでも動くが、タイトルキャプションも付けると、
で、この場合、こうなる。 wx.ICON_QUESTION の場合、アイコンが次のようになる。 ダイアログを表示するときに showModal() とする。フレームのときは、フレームのときは Show() だったのでちょっと違う。モーダル(Modal) は、このダイアログが表示されている間、ダイアログにフォーカスがあたり、OK か Cancel が押されるまで、他に何もできないように作られているタイプのもの。つまり、この手のダイアログの類を作ったときには、ShowModal() を使う。また、Show() にしても何も表示されない。 最後に Destroy() をしないと、OK をクリックすればダイアログは消えるものの、オブジェクトがきちんと破棄されず、MessageDialog が呼び出されるたびに新しいオブジェクトが作られ続ける。つまり、ダイアログのオブジェクトは明示的に破棄しないと、プログラム終了までメモリ内に残ってしまうので注意が必要。 OK, Cancel ダイアログを追加してみるダイアログで複数のボタンがあるようなものを表示し、どちらのボタンが押されたかを処理に使いたい場合はどうしたらよいか。ということで、そのサンプルを載せておく。前のダイアログでは OK だけしか表示せず、その返答も捨てていたが、ここでは何のボタンが押されたかを確認したうえで処理する。ShowModal() を呼ぶと、その結果を取れるので、 if dlg.ShowModal() == wx.ID_OK: のような処理を書けばよいことになる(ShowModal() は、wx.ID_YES、wx.ID_NO、wx.ID_CANCEL、wx.ID_OKのいずれかを返す)。 終了メニューが選択されたときに、ほんとうに終了してもよいですかと表示して、OK なら終了。Cancel ならダイアログだけを閉じて、メインのフレームに戻るようにしてみる。
お気に入りの記事を「いいね!」で応援しよう
Last updated
2015.03.08 17:11:32
コメント(0) | コメントを書く
[Python] カテゴリの最新記事
|