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.yiibai.com')
app.MainLoop()

上面的代碼產生下面的輸出 -

wxPython