fixing some text in wx.textctrl

I am trying to create a command terminal like window…I have used the following code…Problem is that it set the command prompt as “>>>” that is editable.

I want window with fixed “>>>” with cursor waiting for command…now the issue is that user can easily delete “>>>” as it is a simple text…

Is it any way to fixed this par of text in wx.textctrl or in any other control.

class MyFrame(wx.Frame):

def init(self, parent, title):

wx.Frame.init(self, parent, title=title, size=(400,400))

self.SetPosition(wx.Point(0,0))

self.cmdArea = wx.TextCtrl(self, style=wx.TE_MULTILINE)

self.cmdArea.SetValue(">>>")

self.Show(True)

You might be able to Bind the EVT_TEXT event, check if the current key is backspace, and Veto the event if the cursor position is <=4 (i.e. the 4th character, since you want 3 > characters). This will fail if the user types a very long line which starts a new line, then tries to backspace on the newline that they just typed. In that case, you’ll likely want to save the row/line number just after you print >>>, then compare the position during the EVT_TEXT events with that one.

···

On Monday, August 4, 2014 12:17:19 PM UTC-7, Hemadri Saxena wrote:

I am trying to create a command terminal like window…I have used the following code…Problem is that it set the command prompt as “>>>” that is editable.

I want window with fixed “>>>” with cursor waiting for command…now the issue is that user can easily delete “>>>” as it is a simple text…

Is it any way to fixed this par of text in wx.textctrl or in any other control.

class MyFrame(wx.Frame):

def init(self, parent, title):

wx.Frame.init(self, parent, title=title, size=(400,400))

self.SetPosition(wx.Point(0,0))

self.cmdArea = wx.TextCtrl(self, style=wx.TE_MULTILINE)

self.cmdArea.SetValue(“>>>”)

self.Show(True)

Here’s some basic code to get you going… you will need to update self.lastPrompt yourself… I guess some time after an EVT_TEXT_ENTER is pressed… or best after you print a new >>> prompt:

t3 = wx.TextCtrl(self, -1,

                    "Here is a looooooooooooooong line of text set in the control.\n\n"

                    "The quick brown fox jumped over the lazy dog...>>>",

                   size=(200, 100), style=wx.TE_MULTILINE|wx.TE_PROCESS_ENTER)

    t3.SetInsertionPoint(t3.GetLastPosition())

    self.lastPrompt = t3.GetLastPosition()

    self.Bind(wx.EVT_TEXT, self.EvtText, t3)

    self.Bind(wx.EVT_TEXT_ENTER, self.EvtTextEnter, t3)

    t3.Bind(wx.EVT_CHAR, self.OnChar)

def OnChar(self, event):

    #disable backspace for positions less than or equal to the last char of >>>

    if event.GetEventObject().GetInsertionPoint() <= self.lastPrompt and event.GetKeyCode() == 8:

        return False

    #disable entering text only before the >>>, text can be entered at/after this 

    elif event.GetEventObject().GetInsertionPoint() < self.lastPrompt:

        return False

    #do default behaviour for all other cases

    else:

        event.Skip()
···

On Monday, August 4, 2014 2:25:25 PM UTC-7, Nathan McCorkle wrote:

You might be able to Bind the EVT_TEXT event, check if the current key is backspace, and Veto the event if the cursor position is <=4 (i.e. the 4th character, since you want 3 > characters). This will fail if the user types a very long line which starts a new line, then tries to backspace on the newline that they just typed. In that case, you’ll likely want to save the row/line number just after you print >>>, then compare the position during the EVT_TEXT events with that one.

On Monday, August 4, 2014 12:17:19 PM UTC-7, Hemadri Saxena wrote:

I am trying to create a command terminal like window…I have used the following code…Problem is that it set the command prompt as “>>>” that is editable.

I want window with fixed “>>>” with cursor waiting for command…now the issue is that user can easily delete “>>>” as it is a simple text…

Is it any way to fixed this par of text in wx.textctrl or in any other control.

class MyFrame(wx.Frame):

def init(self, parent, title):

wx.Frame.init(self, parent, title=title, size=(400,400))

self.SetPosition(wx.Point(0,0))

self.cmdArea = wx.TextCtrl(self, style=wx.TE_MULTILINE)

self.cmdArea.SetValue(“>>>”)

self.Show(True)