wxPython TextCtrl类

在GUI接口中,输入是最常见的是在一个文本框收集,用户可以使用键盘键入。 在wxPython中,wx.TextCtrl类的一个对象就是用于这一目的。它可以显示文本和编辑的控制。 TextCtrl小部件可以是单行,多行或密码字段。TextCtrl类的构造函数形式如下 -
wx.TextCtrl(parent, id, value, pos, size, style) 

样式(style)参数接受一个或多个常量,如下列表 −

S.N. 参数&描述
1

wx.TE_MULTILINE

文本控件允许多行。如果未指定该样式(style),换行字符不应该在控件值中使用。

2

wx.TE_PASSWORD

文本将回显为星号
3

wx.TE_READONLY

文本将不可编辑
4

wxTE_LEFT

在控件中的文本将左对齐(默认)
5

wxTE_CENTRE

在控件中的文本将居中对齐
6

wxTE_RIGHT

在控件中的文本将居右对齐

wx.TextCtrl类的重要方法。

下面的事件绑定器负责处理事件相关的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()方法可以处理每个击键。第二个框它的最大长度为5。一旦用户试图输入超过500个字符,EVT_TEXT_MAXLEN 绑定器发送运行OnMaxLen()函数。多行文本框响应回车键按下,因为EVT_TEXT_ENTER绑定器。

TextCtr.py 完整的代码如下 -
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, "文本域") 
		
      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, "密码文本") 
		
      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, "多行文本") 
		
      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, "只读取文本") 
		
      hbox4.Add(l4, 1, wx.EXPAND|wx.ALIGN_LEFT|wx.ALL,5) 
      self.t4 = wx.TextCtrl(panel, value = "只读文本",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实例-www.xuhuhu.com')
app.MainLoop()
上面的代码产生下面的输出 -


上一篇: wxPython StaticText类 下一篇: wxPython RadioButton & RadioBox类