buggsbunny4
buggsbunny4

Reputation: 181

Python: Enable Radiobox based upon Checkbox Selection

I have a simple python GUI developed using WXPython. I have a checkbox1, checkbox2 and radiobox1. Based upon the Checkbox2 selection, I want the radiobox1 to be enabled or disabled. For example if Checkbox2 is unchecked, I want the radiobox1 to be disabled. I tried using getvalue() parameter but with no success. Here is the sample code.

Any help is much appreciated.

import wx

def create(parent):
    return Frame1(parent)

[wxID_FRAME1, wxID_FRAME1CHECKBOX1, wxID_FRAME1CHECKBOX2, 
 wxID_FRAME1NOTEBOOK1, wxID_FRAME1PANEL1, wxID_FRAME1RADIOBOX1, 
 wxID_FRAME1STATICBOX1, wxID_FRAME1STATICTEXT1, 
] = [wx.NewId() for _init_ctrls in range(8)]

class Frame1(wx.Frame):
    def _init_coll_notebook1_Pages(self, parent):
        # generated method, don't edit

        parent.AddPage(imageId=-1, page=self.panel1, select=True, text='Pages0')
        parent.AddPage(imageId=-1, page=self.staticText1, select=False,
              text='Pages1')

    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
              pos=wx.Point(470, 184), size=wx.Size(677, 492),
              style=wx.DEFAULT_FRAME_STYLE, title='Frame1')
        self.SetClientSize(wx.Size(661, 454))

        self.notebook1 = wx.Notebook(id=wxID_FRAME1NOTEBOOK1, name='notebook1',
              parent=self, pos=wx.Point(0, 0), size=wx.Size(661, 454), style=0)

        self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1',
              parent=self.notebook1, pos=wx.Point(0, 0), size=wx.Size(653, 428),
              style=wx.TAB_TRAVERSAL)

        self.staticBox1 = wx.StaticBox(id=wxID_FRAME1STATICBOX1,
              label='staticBox1', name='staticBox1', parent=self.panel1,
              pos=wx.Point(16, 16), size=wx.Size(232, 128), style=0)

        self.checkBox1 = wx.CheckBox(id=wxID_FRAME1CHECKBOX1, label='checkBox1',
              name='checkBox1', parent=self.panel1, pos=wx.Point(24, 40),
              size=wx.Size(70, 13), style=0)

        self.checkBox2 = wx.CheckBox(id=wxID_FRAME1CHECKBOX2, label='checkBox2',
              name='checkBox2', parent=self.panel1, pos=wx.Point(24, 64),
              size=wx.Size(70, 13), style=0)
        self.checkBox2.Set3StateValue(1)
        self.checkBox2.Bind(wx.EVT_CHECKBOX, self.OnCheckBox2Checkbox,
              id=wxID_FRAME1CHECKBOX2)

        self.radioBox1 = wx.RadioBox(choices=['Phase A', 'PhaseB', 'Phase C'],
              id=wxID_FRAME1RADIOBOX1, label='radioBox1', majorDimension=3,
              name='radioBox1', parent=self.panel1, pos=wx.Point(32, 88),
              size=wx.Size(200, 44), style=wx.RA_SPECIFY_COLS)

        self.staticText1 = wx.StaticText(id=wxID_FRAME1STATICTEXT1,
              label='staticText1', name='staticText1', parent=self.notebook1,
              pos=wx.Point(0, 0), size=wx.Size(653, 428), style=0)

        self._init_coll_notebook1_Pages(self.notebook1)

    def __init__(self, parent):
        self._init_ctrls(parent)

    def OnCheckBox2Checkbox(self, event):
        #event.Skip()
        if self.checkBox2.GetValue() == 'False':
            self.radioBox1.Enable(False)
            print self.checkBox2.IsChecked()

if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = create(None)
    frame.Show()

    app.MainLoop()

Upvotes: 0

Views: 436

Answers (1)

Steve Barnes
Steve Barnes

Reputation: 28370

I think that your problem is that you are only changing things in one direction - change:

def OnCheckBox2Checkbox(self, event):
    #event.Skip()
    if self.checkBox2.GetValue() == 'False':
        self.radioBox1.Enable(False)
        print self.checkBox2.IsChecked()

to:

def OnCheckBox2Checkbox(self, event):
    self.radioBox1.Enable(self.checkBox2.IsChecked())
    print self.checkBox2.IsChecked()

Upvotes: 1

Related Questions