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。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 Output
wxpython_major_classes.htm
广告