Search code examples
pythonwxpythonwxwidgetswx.textctrl

.GetValue() is not working for TextCtrl in this particular case


hey folks using Python i have bind the radio button and when that's clicked the TextCtrl is called upon but after I type in TextCtrl i am not able to get the string that has been entered, My code goes like this

def A(self,event):
    radiobut = wx.RadioButton(self.nameofframe, label = 'Opt-1', pos = (10,70),size= (90,-1))
    self.Bind(wx.EVT_RADIOBUTTON,self.B,radiobut)
def B(self,event):
    Str1 = wx.TextCtrl(self.nameofframe,pos = (100,70), size=(180,-1))
    print Str1.GetValue()

Could anyone please tell me where is the problem . Why can't i get it printed ?


Solution

  • Radio button usually comes within a group, one or more more than one, and one at least should clicked but you have only one button. What is usually used in such case is a check box, CheckBox.

    In this example, it prints the text entered in TextCtrl when a CheckBox is activated:

    #!python
    # -*- coding: utf-8 -*-
    
    import wx
    
    class MyFrame(wx.Frame):
      def __init__(self, title):
        super(MyFrame, self).__init__(None, title=title)
    
        panel = wx.Panel(self)
        self.check = wx.CheckBox(panel, label='confiurm?', pos =(10,70), size=(90,-1))
        self.text  = wx.TextCtrl(panel, pos=(100,70), size=(180,-1))
        # disable the button until the user enters something
        self.check.Disable()
    
        self.Bind(wx.EVT_CHECKBOX, self.OnCheck, self.check)
        self.Bind(wx.EVT_TEXT, self.OnTypeText, self.text)
    
        self.Centre()
    
      def OnTypeText(self, event):
        '''
        OnTypeText is called when the user types some string and
        activate the check box if there is a string.
        '''
        if( len(self.text.GetValue()) > 0 ):
          self.check.Enable()
        else:
          self.check.Disable()
    
      def OnCheck(self, event):
        '''
        Print the user input if he clicks the checkbox.
        '''
        if( self.check.IsChecked() ):
          print(self.text.GetValue())
    
    class MyApp(wx.App):
      def OnInit(self):
        self.frame = MyFrame('Example')
        self.frame.Show()
        return True
    
    MyApp(False).MainLoop()
    

    This is how it works:

    Step 1 Step 2 Step 3