我在这里对ZetCode给出的Bind()参数的描述进行了挣扎:http://zetcode.com/wxpython/events为
Bind(event, handler, source=None, id=wx.ID_ANY, id2=wx.ID_ANY)
当然,前两个是不言自明的。但是什么是来源'在这种背景下? ID?
关于后者,我当然知道GetId()方法。但它适用于在控件创建期间设置的ID,而不是绑定,对吧?
答案 0 :(得分:0)
我怀疑你已经使用过它,却没有意识到它是什么 例如,这些是等价的:
self.timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)
self.timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.OnTimer, source=self.timer)
self.timer = wx.Timer(self,42)
self.Bind(wx.EVT_TIMER, self.OnTimer, id=42)
self.timer = wx.Timer(self,wx.NewId())
self.Bind(wx.EVT_TIMER, self.OnTimer, id=self.timer.GetId())
id=wx.ID_ANY, id2=wx.ID_ANY
只允许您指定一系列身份证,在事件发生时您将负责检查身份证明。
例如,我出于这样的原因使用此代码。
self.Bind(wx.EVT_MENU, self.OnAutoTimeStamp, id=TIMESTAMP_OFF,id2=TIMESTAMP_COMMENT)
其中:
TIMESTAMP_OFF = wx.NewId()
TIMESTAMP_STD = wx.NewId()
TIMESTAMP_BOOKMARK = wx.NewId()
TIMESTAMP_COMMENT = wx.NewId()
请注意,它们可以很容易地是1,2,3和4
在这种情况下,上面将是
self.Bind(wx.EVT_MENU, self.OnAutoTimeStamp, id=1,id2=4)
和
def OnAutoTimeStamp(self,event):
if self.autom.IsChecked(TIMESTAMP_OFF):
self.auto_ts = ""
elif self.autom.IsChecked(TIMESTAMP_STD):
self.auto_ts = "S"
elif self.autom.IsChecked(TIMESTAMP_BOOKMARK):
self.auto_ts = "B"
elif self.autom.IsChecked(TIMESTAMP_COMMENT):
self.auto_ts = "A"