Search code examples
pythonwxpython

Is there a platform independent method to disable a wxpython spinEdit control


In the GUI code below I have two spinEdit controls and buttons to enable/disable the controls. On Windows I can disable the spinEdit using the Enable/Disable methods of the control but on Mac I need to Enable/Disable the child components of the control. I would like to know if there was wondering if there is a single cross platform method to enable/disable the spinEdit control without resorting to querying the OS type?

Using Python 2.7, wxpython 2.8.12.1-1 on windows Using Python 2.7, wxpython 2.9.2.4-1 on mac

import wx

class CtrlPanel(wx.Panel):

def __init__(self, parent):

    wx.Panel.__init__(self, parent)

#  make edit controls
    self.spinEditWin = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS|wx.TE_PROCESS_ENTER, 0, 10, 0 )
    self.spinEditMac = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS|wx.TE_PROCESS_ENTER, 0, 10, 0 )
    self.buttonEn = wx.Button(self, wx.ID_ANY, label='enable')
    self.buttonDi = wx.Button(self, wx.ID_ANY, label='disable')


    self.sizer = wx.BoxSizer(wx.VERTICAL)
    self.sizer.Add(self.spinEditWin, 0, wx.EXPAND)
    self.sizer.Add(self.spinEditMac, 0, wx.EXPAND)
    self.sizer.Add(self.buttonEn, 0, wx.EXPAND)
    self.sizer.Add(self.buttonDi, 0, wx.EXPAND)
    self.SetSizer(self.sizer)
    self.Fit()


    self.buttonEn.Bind(wx.EVT_BUTTON, self.enableControlEvt)
    self.buttonDi.Bind(wx.EVT_BUTTON, self.disableControlEvt)   

def enableControlEvt( self, evt ):
    self.spinEditWin.Enable(True)
    for achild in self.spinEditMac.GetChildren():
        achild.Enable(True)
    evt.Skip()

def disableControlEvt( self, evt ):
    self.spinEditWin.Enable(False)
    for achild in self.spinEditMac.GetChildren():
        achild.Enable(False)
    evt.Skip()


if __name__ == "__main__":
    app = wx.PySimpleApp()
    fr = wx.Frame(None, title='test')
    panel = CtrlPanel(fr)
    fr.Show()
    app.MainLoop()

Solution

  • Update your wxPython to the newest version, that problem has been fixed. If you can't update for some reason then what you have already done is probably the best thing to do.