]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/TextCtrl.py
   5 #--------------------------------------------------------------------------- 
   7 class TestPanel(wx
.Panel
): 
   8     def OnSetFocus(self
, evt
): 
  11     def OnKillFocus(self
, evt
): 
  14     def OnWindowDestroy(self
, evt
): 
  15         print "OnWindowDestroy" 
  19     def __init__(self
, parent
, log
): 
  20         wx
.Panel
.__init
__(self
, parent
, -1) 
  23         l1 
= wx
.StaticText(self
, -1, "wx.TextCtrl") 
  24         t1 
= wx
.TextCtrl(self
, -1, "Test it out and see", size
=(125, -1)) 
  25         wx
.CallAfter(t1
.SetInsertionPoint
, 0) 
  28         self
.Bind(wx
.EVT_TEXT
, self
.EvtText
, t1
) 
  29         t1
.Bind(wx
.EVT_CHAR
, self
.EvtChar
) 
  30         t1
.Bind(wx
.EVT_SET_FOCUS
, self
.OnSetFocus
) 
  31         t1
.Bind(wx
.EVT_KILL_FOCUS
, self
.OnKillFocus
) 
  32         t1
.Bind(wx
.EVT_WINDOW_DESTROY
, self
.OnWindowDestroy
) 
  34         l2 
= wx
.StaticText(self
, -1, "Password") 
  35         t2 
= wx
.TextCtrl(self
, -1, "", size
=(125, -1), style
=wx
.TE_PASSWORD
) 
  36         self
.Bind(wx
.EVT_TEXT
, self
.EvtText
, t2
) 
  38         l3 
= wx
.StaticText(self
, -1, "Multi-line") 
  39         t3 
= wx
.TextCtrl(self
, -1, 
  40                         "Here is a looooooooooooooong line of text set in the control.\n\n" 
  41                         "The quick brown fox jumped over the lazy dog...", 
  42                        size
=(200, 100), style
=wx
.TE_MULTILINE|wx
.TE_PROCESS_ENTER
) 
  44         t3
.SetInsertionPoint(0) 
  45         self
.Bind(wx
.EVT_TEXT
, self
.EvtText
, t3
) 
  46         self
.Bind(wx
.EVT_TEXT_ENTER
, self
.EvtTextEnter
, t3
) 
  48         b 
= wx
.Button(self
, -1, "Test Replace") 
  49         self
.Bind(wx
.EVT_BUTTON
, self
.OnTestReplace
, b
) 
  50         b2 
= wx
.Button(self
, -1, "Test GetSelection") 
  51         self
.Bind(wx
.EVT_BUTTON
, self
.OnTestGetSelection
, b2
) 
  52         b3 
= wx
.Button(self
, -1, "Test WriteText") 
  53         self
.Bind(wx
.EVT_BUTTON
, self
.OnTestWriteText
, b3
) 
  57         l4 
= wx
.StaticText(self
, -1, "Rich Text") 
  58         t4 
= wx
.TextCtrl(self
, -1, "If supported by the native control, this is red, and this is a different font.", 
  59                         size
=(200, 100), style
=wx
.TE_MULTILINE|wx
.TE_RICH2
) 
  60         t4
.SetInsertionPoint(0) 
  61         t4
.SetStyle(44, 47, wx
.TextAttr("RED", "YELLOW")) 
  62         points 
= t4
.GetFont().GetPointSize()  # get the current size 
  63         f 
= wx
.Font(points
+3, wx
.ROMAN
, wx
.ITALIC
, wx
.BOLD
, True) 
  64         t4
.SetStyle(63, 77, wx
.TextAttr("BLUE", wx
.NullColour
, f
)) 
  66         l5 
= wx
.StaticText(self
, -1, "Test Positions") 
  67         t5 
= wx
.TextCtrl(self
, -1, "0123456789\n" * 5, size
=(200, 100), 
  68                         style 
= wx
.TE_MULTILINE
 
  72         t5
.Bind(wx
.EVT_LEFT_DOWN
, self
.OnT5LeftDown
) 
  76         bsizer 
= wx
.BoxSizer(wx
.VERTICAL
) 
  77         bsizer
.Add(b
, 0, wx
.GROW|wx
.ALL
, space
) 
  78         bsizer
.Add(b2
, 0, wx
.GROW|wx
.ALL
, space
) 
  79         bsizer
.Add(b3
, 0, wx
.GROW|wx
.ALL
, space
) 
  81         sizer 
= wx
.FlexGridSizer(cols
=3, hgap
=space
, vgap
=space
) 
  82         sizer
.AddMany([ l1
, t1
, (0,0), 
  88         border 
= wx
.BoxSizer(wx
.VERTICAL
) 
  89         border
.Add(sizer
, 0, wx
.ALL
, 25) 
  91         self
.SetAutoLayout(True) 
  94     def EvtText(self
, event
): 
  95         self
.log
.WriteText('EvtText: %s\n' % event
.GetString()) 
  97     def EvtTextEnter(self
, event
): 
  98         self
.log
.WriteText('EvtTextEnter\n') 
 101     def EvtChar(self
, event
): 
 102         self
.log
.WriteText('EvtChar: %d\n' % event
.GetKeyCode()) 
 106     def OnTestReplace(self
, evt
): 
 107         self
.tc
.Replace(5, 9, "IS A") 
 108         #self.tc.Remove(5, 9) 
 110     def OnTestWriteText(self
, evt
): 
 111         self
.tc
.WriteText("TEXT") 
 113     def OnTestGetSelection(self
, evt
): 
 114         start
, end 
= self
.tc
.GetSelection() 
 115         text 
= self
.tc
.GetValue() 
 116         if wx
.Platform 
== "__WXMSW__":  # This is why GetStringSelection was added 
 117             text 
= text
.replace('\n', '\r\n') 
 119         self
.log
.write("multi-line GetSelection(): (%d, %d)\n" 
 120                        "\tGetStringSelection(): %s\n" 
 121                        "\tSelectedText: %s\n" % 
 123                         self
.tc
.GetStringSelection(), 
 124                         repr(text
[start
:end
]))) 
 126         start
, end 
= self
.tc1
.GetSelection() 
 127         text 
= self
.tc1
.GetValue() 
 129         if wx
.Platform 
== "__WXMSW__":  # This is why GetStringSelection was added 
 130             text 
= text
.replace('\n', '\r\n') 
 132         self
.log
.write("single-line GetSelection(): (%d, %d)\n" 
 133                        "\tGetStringSelection(): %s\n" 
 134                        "\tSelectedText: %s\n" % 
 136                         self
.tc1
.GetStringSelection(), 
 137                         repr(text
[start
:end
]))) 
 140     def OnT5LeftDown(self
, evt
): 
 142         wx
.CallAfter(self
.LogT5Position
, evt
) 
 144     def LogT5Position(self
, evt
): 
 145         text 
= self
.t5
.GetValue() 
 146         ip 
= self
.t5
.GetInsertionPoint() 
 147         lp 
= self
.t5
.GetLastPosition() 
 148         self
.log
.write("LogT5Position:\n" 
 149                        "\tGetInsertionPoint:\t%d\n" 
 150                        "\ttext[insertionpoint]:\t%s\n" 
 151                        "\tGetLastPosition:\t%d\n" 
 152                        "\tlen(text):\t\t%d\n" 
 153                        % (ip
, text
[ip
], lp
, len(text
))) 
 156 #--------------------------------------------------------------------------- 
 158 def runTest(frame
, nb
, log
): 
 159     win 
= TestPanel(nb
, log
) 
 162 #--------------------------------------------------------------------------- 
 166 A TextCtrl allows text to be displayed and (possibly) edited. It may be single  
 167 line or multi-line, support styles or not, be read-only or not, and even supports 
 168 text masking for such things as passwords. 
 174 if __name__ 
== '__main__': 
 177     run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])