代码之家  ›  专栏  ›  技术社区  ›  vanhemt

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

  •  0
  • vanhemt  · 技术社区  · 7 年前

    我正在与ZetCode给出的Bind()参数的描述作斗争: http://zetcode.com/wxpython/events

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

    当然,前两个是不言而喻的。但在这种情况下,“来源”是什么?身份证件?

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Rolf of Saxony    7 年前

    我怀疑你已经在使用它了,而没有意识到它是什么。
    例如,这些是等效的:

        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 只允许您分配一系列id,在事件发生时负责检查id。
    例如,我使用此代码正是出于这样的原因。

        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"