- wxPython 教程
- wxPython - 首页
- wxPython - 简介
- wxPython - 环境搭建
- wxPython - Hello World
- wxPython - GUI 构建工具
- wxPython - 主要类
- wxPython - 事件处理
- wxPython - 布局管理
- wxPython - 按钮
- wxPython - 可停靠窗口
- 多文档界面
- wxPython - 绘图 API
- wxPython - 拖放操作
- wxPython 资源
- wxPython - 快速指南
- wxPython - 有用资源
- wxPython - 讨论区
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()
以上代码产生以下输出: