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类的重要方法是-
以下是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 当在文本框中按下回车键时调用关联处理程序 |
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 binder会触发OnKeyTyped()方法,对每个按键进行处理。第二个文本框的MaxLength设置为5。当用户尝试输入超过5个字符时,EVT_TEXT_MAXLEN binder会调用OnMaxLen()函数。多行文本框响应按下Enter键,是因为有EVT_TEXT_ENTER binder。
完整的代码如下:
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()
上面的代码产生以下输出−