使用wxPython在动态创建的按钮中发送变量

时间:2016-01-25 17:14:42

标签: python wxpython

我想从动态创建的按钮(其中14个)

向函数发送变量
# creating buttons
    for i in range(0, 14):
        m_pauser.append(wx.Button(panel, 5, "Pause "+str(i)))
        m_pauser[i].Bind(wx.EVT_BUTTON, lambda event: self.dispenser_pause(event, i), m_pauser[i])
        box.Add(m_pauser[i], 0, wx.ALL, 10)


# function called by buttons
    def dispenser_pause(self, event, my_value):
        print my_value

问题是所有按钮总是发送13('for'循环中'i'的最后一个值)

如何为按钮分配值,以便将其发送给函数?这是使它运作的正确方法吗?

我刚开始使用Python,所以可能有很多我错过了

由于

1 个答案:

答案 0 :(得分:2)

我认为问题是每个按钮都会获得相同的ID,在您的示例中似乎是5。硬编码wxwidgets ID是一个坏习惯。请改用-1wx.NewId()

编辑:这不是ID(但ID应该是唯一的,无论如何)。原因是i确实指向了它的最后一个值(在循环期间,i总是"同样的事情"并且永远不会" distinct {{ 1}}' S)。请改为:

为了清楚起见,可以执行以下操作:

i

the wxPython wiki中解释的原因比我能做的更好。