リンク

2016年4月20日水曜日

pythonでGUIツールを作る ~ステータスバーの設置~

pythonでGUIフォームを作成するためのツールキットはいくつか存在します。
中でも「wxPython」はプリインストールされている「tkinter」よりも使い勝手・自由度が高く、人気があるようです。

当ブログではそんな「wxPython」を用いてpythonでGUIツールを作成する方法を少しずつご紹介していきます。

- - - - - - - - - - - - - - - - - - - - - - - - -

wxPythonでは、フレームの最下部に「ステータスバー」という領域を作成することができます。

このステータスバーには文字列を表示することができ、様々な使い方が可能です。

私は下記のような使い方をしています。
 1.ボタンにマウスポインタを合わせたとき、そのボタンの説明文を表示させる。
  例:「ボタンをクリックすると処理を開始します」
 2.複雑な処理を行うとき、進捗状態を表示する。
  例:「ファイルをコピーしています…」

# -*- coding: utf-8 -*-

import wx

app = wx.App()

frame = wx.Frame(None, -1, u'タイトル', size=(200, 200))

# ステータスバーの設置
frame.CreateStatusBar()

# ステータスバーにテキストを追加
frame.SetStatusText(u'ここがステータスバー')

frame.Show()
app.MainLoop()
<結果>

上記スクリプト内で、過去に解説した内容については省略致します。
ご確認いただきたい場合は、~基礎編~をご覧ください。

続いて詳細を見ていきます。



~~詳細~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# ステータスバーの設置
frame.CreateStatusBar()
フレーム作成後、ステータスバーを設置します。
# ステータスバーにテキストを追加
frame.SetStatusText(u'ここがステータスバー')
作成したステータスバーにテキストを追加します。

上記スクリプトでは、ステータスバー設置時に引数を設定しておりませんが、数値を引数に設定するとステータスバーの領域を分割することができます。
分割したステータスバーにテキストを追加する際は、第2引数に追加するインデックスを指定します。(0始まり)

# ステータスバーの設置
frame.CreateStatusBar(3)

# ステータスバーにテキストを追加
frame.SetStatusText(u'ここ', 1)
<結果>

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ステータスバーはちょっとした情報を表示するのに非常に便利です。
ご存じなかった方は、ぜひ導入の検討をしてみてはいかがでしょうか。

==================================================================
環 境:Python 2.7.9 / Windows7
==================================================================
この記事が参考になりましたら、シェア・フォロー・おすすめしていただけると励みになります! \(^o^)/
==================================================================

3 件のコメント:

  1. Hide() でステータスバーを非表示にしますが、なんか変になります。
    どうやら、ウィンドウのサイズを変更するなど、ワンクッションはさむ必要があるようです。
    どうすれば、すぐに、反映されるようになりますか?

    返信削除
    返信
    1. コメントありがとうございます。返信が遅くなり申し訳ありません。
      ステータスバーを非表示にすると「変になる」とのことですが、具体的にはどんな挙動になりますか?
      私のほうでテストしたところ、Hide()を実行すればすぐに非表示になり、別のコマンドを実行しなくても反映してしまいました。(・・;)
      ちなみに↓のように書きました。

      # -*- coding: UTF-8 -*-

      import wx

      class App(wx.Frame):
      ____def __init__(self, parent, id, title):
      ________wx.Frame.__init__(self, parent, id, title, size=(400, 300), style=wx.DEFAULT_FRAME_STYLE)

      ________# ステータスバー
      ________self.statusbar = self.CreateStatusBar()
      ________self.statusbar.SetStatusText('ステータスバー文字列')

      ________# パネル
      ________self.p = wx.Panel(self, wx.ID_ANY)

      ________# ボタン
      ________self.btn = wx.Button(self.p,wx.ID_ANY,'button')
      ________self.btn.Bind(wx.EVT_BUTTON,self.click)

      ________layout = wx.BoxSizer(wx.VERTICAL)
      ________layout.Add(self.btn, flag=wx.EXPAND | wx.ALL, border=10, proportion=1)
      ________self.p.SetSizer(layout)

      ________self.Show()

      ____def click(self, event):
      ________""" ボタンクリックイベント """
      ________print("クリックしました")

      ________if self.statusbar.IsShown():
      ____________self.statusbar.Hide()
      ________else:
      ____________self.statusbar.Show()

      app = wx.App()
      App(None, wx.ID_ANY, 'ステータスバーテスト')
      app.MainLoop()

      削除
    2. 返答ありがとうございます。
      以下のURLにあるような画像になるのは私だけなのですか?
      https://fujiwaramaki313.wixsite.com/errr
      (このサイトは解決次第削除します。)

      削除