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.tw511.com')
app.MainLoop()
上面的程式碼產生下面的輸出 -