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()

以上程式碼產生以下輸出:

TextCtrl Output
wxpython_major_classes.htm
廣告

© . All rights reserved.