- 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()
以上程式碼產生以下輸出: