04 wxPython TextCtrl类


在GUI界面中,输入最常收集在文本框中,用户可以使用键盘进行键入。在wxPython中,wx.TextCtrl类的对象用于此目的。它是一个可以显示和编辑文本的控件。所述TextCtrl插件可以是单线,多线或一个密码字段。TextCtrl类构造函数采用以下形式

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

style参数从以下列表中获取一个或多个常量

下面给出了最常用的样式参数。

序号 参数和描述
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最常用的方法

序号 方法和描述
1

AppendText()

将文本添加到文本控件的末尾

2

Clea()

清除内容

3

GetValue()

返回文本框的内容

4

Replace()

替换框中的全部或部分文本

5

SetEditable()

使文本框可编辑或只读

6

SetMaxLength()

设置控件可容纳的最大字符数

7

SetValue()

以编程方式设置文本框中的内容

8

IsMultiLine()

如果设置为TE_MULTILINE,则返回true

以下事件绑定器负责与在TextCtrl框中输入文本相关的事件处理

序号 活动和描述
1

EVT_TEXT

通过手动键入或以编程方式响应文本框内容的更改

2

EVT_TEXT_ENTER

在文本框中按Enter键时调用关联的处理程序

3

EVT_TEXT_MAXLEN

一旦输入的文本长度达到SetMaxLength()函数的值,就触发相关的处理程序

在以下示例中,将在面板上放置具有不同属性的四个wx.TextCtrl类对象。

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 )

第一个是普通文本框,第二个是密码字段。第三个是多行文本框,最后一个文本框是不可编辑的。

第一个框上的EVT_TEXT绑定器触发其中每个键击的OnKeyTyped()方法。第二个框的MaxLength设置为5.一旦用户尝试键入超过5个字符,EVT_TEXT_MAXLEN活页夹就会发送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