リンク

2016年4月21日木曜日

pythonでGUIツールを作る ~TextCtrl テキストコントロール~

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

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

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

今回はユーザーからの入力を受け付ける”テキストコントロール“について書いていきます。

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

import wx

app = wx.App()

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

# テキストコントロールの設置
textbox1 = wx.TextCtrl(panel, -1, pos=(10,10))
textbox2 = wx.TextCtrl(panel, -1, u'初期値あり', pos=(10,40))
textbox3 = wx.TextCtrl(panel, -1, u'右寄せ', pos=(10,70), style=wx.TE_RIGHT)

frame.Show()
app.MainLoop()

<結果>

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

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



~~詳細~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# テキストコントロールの設置
textbox1 = wx.TextCtrl(panel, -1, pos=(10,10))
テキストコントロールを作成するには、wx.TextCtrlクラスを使用します。 textbox1は、引数に(親ウィジット、識別子、配置位置)を指定しており、これが基本型となります。
textbox2 = wx.TextCtrl(panel, -1, u'初期値あり', pos=(10,40))
textbox2では「初期入力値」を指定しています。
textbox3 = wx.TextCtrl(panel, -1, u'右寄せ', pos=(10,70), style=wx.TE_RIGHT)
textbox3ではさらに「文字列の配置方向」を”右寄せ”に指定しています。
配置の選択肢はwx.TE_LEFT(左寄せ)、wx.TE_CENTER(中央揃え)、wx.TE_RIGHT(右寄せ)のいずれかで、規定値はwx.TE_LEFT(左寄せ)です。

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

ここからは、wx.TextCtrlクラスでよく使用する主な関数をご紹介します。
# 既存値を置き換える
textbox1.SetValue(u'この文字に置き換え')

# 既存値の左側に追記する
textbox1.WriteText(u'追記する')

# 既存値の右側に追記する
textbox1.AppendText(u'追記する')

# 既存値を削除する
textbox1.Clear()

# 既存値の一部を削除する
textbox1.Remove(2, 3)
##  削除する範囲はインデックス番号で指定する。
## 上記の例ではインデックス2からインデックス3の前まで(=インデックス2の文字のみ)を削除する。

# 既存値の一部を置き換える
textbox1.Replace(2, 3, u'る')
##  置き換える範囲はインデックス番号で指定する。
##  上記の例ではインデックス2からインデックス3の前まで(=インデックス2の文字のみ)を「る」に置き換える。

# 既存値を取得する
textbox1.GetValue()

# 指定範囲のみを取得する
textbox1.GetRange(2, 3)

# 全て選択状態にする
textbox1.SelectAll()

# 現在選択されている値を取得する
textbox1.GetStringSelection()

# 現在選択されている値のインデックス番号を取得する
textbox1.GetSelection()

# 入力文字数を制限する
textbox1.SetMaxLength(10)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

テキストコントロールは基本的なウィジットのひとつです。
使用する機会も多くなると思いますので、しっかり覚えておきましょう。

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

3 件のコメント:

  1. あとから右寄せ、左寄せ、中央寄せを変更したいのですが、できますか?

    返信削除
    返信
    1. コメントありがとうございます!
      あとから変更するには次のように書けば可能です。

      textbox3.SetWindowStyle(style=wx.TE_LEFT) #左寄せ
      textbox3.SetWindowStyle(style=wx.TE_CENTRE) #中央寄せ
      textbox3.SetWindowStyle(style=wx.TE_RIGHT) #右寄せ

      ただし、こちらでテストしたところ、そのままではすぐに適用されませんでした。
      (フォーカスを移すなどのワンクッションが必要でした)
      よって、panel.Refresh()を続けて行うと期待通りのものになると思います。

      削除
    2. 返信ありがとうございます!!
      参考になりました!!

      削除