是否有一种平台独立的方法来禁用 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 更新到最新版本,该问题已得到解决。如果您由于某种原因无法更新,那么您已经完成的可能是最好的选择。
在下面的 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-1import 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 更新到最新版本,该问题已得到解决。如果您由于某种原因无法更新,那么您已经完成的可能是最好的选择。