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 类的重要方法是 -
    序列号 方法和描述
    1
    AppendText()
    将文本添加到文本控件的末尾
    2
    Clear()
    清除内容
    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 输出