Wxpython-wx-textctrl-class

提供:Dev Guides
移動先:案内検索

wxPython-TextCtrlクラス

GUIインターフェイスでは、ユーザーがキーボードを使用して入力できるテキストボックスに入力が収集されるのが最も一般的です。 wxPythonでは、wx.TextCtrlクラスのオブジェクトがこの目的を果たします。 テキストを表示および編集できるコントロールです。 TextCtrl ウィジェットは、単一行、複数行、またはパスワードフィールドにすることができます。 TextCtrlクラスのコンストラクタは、次の形式を取ります-

wx.TextCtrl(parent, id, value, pos, size, style)

スタイルパラメータは、次のリストから1つ以上の定数を取ります-

以下に、最も一般的に使用されるスタイルのパラメーターを示します。

S.N. Parameters & Description
1

wx.TE_MULTILINE

テキストコントロールは複数行を許可します。 このスタイルが指定されていない場合、コントロールの値に改行文字を使用しないでください。

2

wx.TE_PASSWORD

テキストはアスタリスクとしてエコーされます

3

wx.TE_READONLY

テキストはユーザーが編集できません

4

wxTE_LEFT

コントロール内のテキストは左寄せされます(デフォルト)

5

wxTE_CENTRE

コントロール内のテキストは中央に配置されます

6

wxTE_RIGHT

コントロール内のテキストは右揃えになります

wx.TextCtrlクラスの重要なメソッドは次のとおりです-

以下に、wx.TextCtrlの最も一般的に使用されるメソッドを示します

S.N. Methods & Description
1

AppendText()

テキストコントロールの最後にテキストを追加します

2

Clear()

内容をクリアします

3

GetValue()

テキストボックスの内容を返します

4

Replace()

ボックス内のテキストの全体または一部を置き換えます

5

SetEditable()

テキストボックスを編集可能または読み取り専用にします

6

SetMaxLength()

コントロールが保持できる最大文字数を設定します

7

SetValue()

テキストボックスの内容をプログラムで設定します

8

IsMultiLine()

TE_MULTILINEに設定されている場合はtrueを返します

次のイベントバインダーは、TextCtrlボックスへのテキスト入力に関連するイベント処理を担当します-

S.N. Events & Description
1

EVT_TEXT

手動でキー入力するか、プログラムでテキストボックスの内容の変更に応答します。

2

EVT_TEXT_ENTER

テキストボックスでEnterキーが押されたときに、関連付けられたハンドラーを呼び出します

3

EVT_TEXT_MAXLEN

入力されたテキストの長さがSetMaxLength()関数の値に達するとすぐに、関連付けられたハンドラーをトリガーします

次の例では、異なる属性を持つwx.TextCtrlクラスの4つのオブジェクトがパネルに配置されています。

self.t1 = wx.TextCtrl(panel)
self.t2 = wx.TextCtrl(panel,style = wx.TE_PASSWORD)
self.t3 = wx.TextCtrl(panel,size = (200,100),style = wx.TE_MULTILINE)
self.t4 = wx.TextCtrl ( panel, value = "ReadOnly Text",
   style = wx.TE_READONLY | wx.TE_CENTER )

1つ目は通常のテキストボックスですが、2つ目はパスワードフィールドです。 3番目は複数行のテキストボックスで、最後のテキストボックスは編集できません。

最初のボックスのEVT_TEXTバインダーは、そのキーストロークごとにOnKeyTyped()メソッドをトリガーします。 2番目のボックスのMaxLengthは5に設定されています。 EVT_TEXT_MAXLENバインダーは、ユーザーが5文字を超える文字を入力しようとするとすぐにOnMaxLen()関数を実行します。 複数行のテキストボックスは、EVT_TEXT_ENTERバインダーのために押されたEnterキーに応答します。

完全なコードは次のとおりです-

import wx

class Mywin(wx.Frame):
   def __init__(self, parent, title):
      super(Mywin, self).__init__(parent, title = title,size = (350,250))

      panel = wx.Panel(self)
      vbox = wx.BoxSizer(wx.VERTICAL)

      hbox1 = wx.BoxSizer(wx.HORIZONTAL)
      l1 = wx.StaticText(panel, -1, "Text Field")

      hbox1.Add(l1, 1, wx.EXPAND|wx.ALIGN_LEFT|wx.ALL,5)
      self.t1 = wx.TextCtrl(panel)

      hbox1.Add(self.t1,1,wx.EXPAND|wx.ALIGN_LEFT|wx.ALL,5)
      self.t1.Bind(wx.EVT_TEXT,self.OnKeyTyped)
      vbox.Add(hbox1)

      hbox2 = wx.BoxSizer(wx.HORIZONTAL)
      l2 = wx.StaticText(panel, -1, "password field")

      hbox2.Add(l2, 1, wx.ALIGN_LEFT|wx.ALL,5)
      self.t2 = wx.TextCtrl(panel,style = wx.TE_PASSWORD)
      self.t2.SetMaxLength(5)

      hbox2.Add(self.t2,1,wx.EXPAND|wx.ALIGN_LEFT|wx.ALL,5)
      vbox.Add(hbox2)
      self.t2.Bind(wx.EVT_TEXT_MAXLEN,self.OnMaxLen)

      hbox3 = wx.BoxSizer(wx.HORIZONTAL)
      l3 = wx.StaticText(panel, -1, "Multiline Text")

      hbox3.Add(l3,1, wx.EXPAND|wx.ALIGN_LEFT|wx.ALL,5)
      self.t3 = wx.TextCtrl(panel,size = (200,100),style = wx.TE_MULTILINE)

      hbox3.Add(self.t3,1,wx.EXPAND|wx.ALIGN_LEFT|wx.ALL,5)
      vbox.Add(hbox3)
      self.t3.Bind(wx.EVT_TEXT_ENTER,self.OnEnterPressed)

      hbox4 = wx.BoxSizer(wx.HORIZONTAL)
      l4 = wx.StaticText(panel, -1, "Read only text")

      hbox4.Add(l4, 1, wx.EXPAND|wx.ALIGN_LEFT|wx.ALL,5)
      self.t4 = wx.TextCtrl(panel, value = "ReadOnly
         Text",style = wx.TE_READONLY|wx.TE_CENTER)

      hbox4.Add(self.t4,1,wx.EXPAND|wx.ALIGN_LEFT|wx.ALL,5)
      vbox.Add(hbox4)
      panel.SetSizer(vbox)

      self.Centre()
      self.Show()
      self.Fit()

   def OnKeyTyped(self, event):
      print event.GetString()

   def OnEnterPressed(self,event):
      print "Enter pressed"

   def OnMaxLen(self,event):
      print "Maximum length reached"

app = wx.App()
Mywin(None,  'TextCtrl demo')
app.MainLoop()

上記のコードは、次の出力を生成します-

TextCtrl出力