wxPython - TextCtrl 类

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

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

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 类的重要方法是 −

S.N. 方法与说明
1

AppendText()

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

2

Clear()

清除内容

3

GetValue()

返回文本框的内容

4

Replace()

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

5

SetEditable()

使文本框可编辑或只读

6

SetMaxLength()

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

7

SetValue()

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

8

IsMultiLine()

如果设置为 TE_MULTILINE,则返回 true

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

S.N. 事件 & 描述
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 输出

❮ wxPython 主要类