是否有一种平台独立的方法来禁用 wxpython spinEdit 控件

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

在下面的 GUI 代码中,我有两个 spinEdit 控件和 enable/disable 控件的按钮。在 Windows 上,我可以使用控件的 Enable/Disable 方法禁用 spinEdit,但在 Mac 上,我需要 Enable/Disable 控件的子组件。我想知道是否有人想知道是否有一个单一的跨平台方法来 enable/disable spinEdit 控件而不求助于查询 OS 类型?

在 windows 上使用 Python 2.7、wxpython 2.8.12.1-1 在 mac

上使用 Python 2.7、wxpython 2.9.2.4-1
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()

将您的 wxPython 更新到最新版本,该问题已得到解决。如果您由于某种原因无法更新,那么您已经完成的可能是最好的选择。