Bind() - 第3个和更多参数?

时间:2018-03-04 10:01:20

标签: wxpython

我在这里对ZetCode给出的Bind()参数的描述进行了挣扎:http://zetcode.com/wxpython/events

Bind(event, handler, source=None, id=wx.ID_ANY, id2=wx.ID_ANY)

当然,前两个是不言自明的。但是什么是来源'在这种背景下? ID?

关于后者,我当然知道GetId()方法。但它适用于在控件创建期间设置的ID,而不是绑定,对吧?

1 个答案:

答案 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"