wxPython – TextCtrl类

wxPython – TextCtrl类

在GUI界面中,最常见的是在一个文本框中收集输入,用户可以使用键盘输入。在wxPython中,wx.TextCtrl类的一个对象起到了这个作用。它是一个可以显示和编辑文本的控件。 TextCtrl 小部件可以是单行、多行或密码字段。TextCtrl类的构造函数采用以下形式

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

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

下面是最常用的样式参数 。 S.N. 参数和描述
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. 方法和描述
1 AppendText() 将文本添加到文本控件的末端。
2 Clear() 清除内容
3 GetValue() 返回文本框的内容
4 替换() 替换方框内的全部或部分文本
5 SetEditable() 使文本框可编辑或只读
6 SetMaxLength() 设置控件可容纳的最大字符数
7 SetValue() 以编程方式设置文本框中的内容
8 IsMultiLine() 如果设置为TE_MULTILINE,则返回真。

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

S.N. 事件及描述
1 EVT_TEXT 响应文本框内容的变化,可以是手动输入,也可以是程序性输入
2 EVT_TEXT_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。EVT_TEXT_MAXLEN绑定器在用户试图输入超过5个字符时,立即发送OnMaxLen()函数运行。由于EVT_TEXT_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()

上述代码产生的输出结果如下 –

wxPython - TextCtrl类

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程