使用 wxPython 在动态创建的按钮中发送变量
Send variables in dynamically created buttons with 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,所以我可能遗漏了很多东西
谢谢
我想问题是每个按钮都有相同的 ID,在您的示例中似乎是 5
。硬编码 wxwidgets ID 是一个坏习惯。请改用 -1
或 wx.NewId()
。
编辑:这不是 ID(但无论如何 ID 应该是唯一的)。原因是 i
确实指向它的最后一个值(在循环期间,i
总是 "the same thing" 并且从来没有“不同的 i
”)。改为以下内容:
为了清楚起见,可以执行以下操作:
m_pauser = []
for i in range(0, 14):
btn = wx.Button(panel, -1, "Pause "+str(i))
m_pauser.append(btn)
btn.Bind(wx.EVT_BUTTON, lambda event, temp=i: self.dispenser_pause(event, temp))
box.Add(btn, 0, wx.ALL, 10)
原因在 the wxPython wiki 中解释得比我能做到的更好。
我想从动态创建的按钮(其中 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,所以我可能遗漏了很多东西
谢谢
我想问题是每个按钮都有相同的 ID,在您的示例中似乎是 5
。硬编码 wxwidgets ID 是一个坏习惯。请改用 -1
或 wx.NewId()
。
编辑:这不是 ID(但无论如何 ID 应该是唯一的)。原因是 i
确实指向它的最后一个值(在循环期间,i
总是 "the same thing" 并且从来没有“不同的 i
”)。改为以下内容:
为了清楚起见,可以执行以下操作:
m_pauser = []
for i in range(0, 14):
btn = wx.Button(panel, -1, "Pause "+str(i))
m_pauser.append(btn)
btn.Bind(wx.EVT_BUTTON, lambda event, temp=i: self.dispenser_pause(event, temp))
box.Add(btn, 0, wx.ALL, 10)
原因在 the wxPython wiki 中解释得比我能做到的更好。