我目前正在用wxPython(用于Python的wxWidgets)编写一个应用程序
在这个应用程序中,会显示一个对话列表,每行末尾都有一个“打开对话”按钮。让我们将此窗口称为“所有对话”
单击任意一个按钮调用函数“打开会话(self,event)”,该函数显示完整的会话
我想做的是,在生成“所有对话”窗口时,在每个“绑定”事件或每个“wxButton”对象中传递一些自定义数据,例如字符串(例如联系人的名称);之后,当单击按钮时,它将在“event”参数中传递所述数据,并在函数中使用类似contact = event.CustomData["recipient"]
的内容进行访问
参考documentation,我找到了“Bind”方法的“userData”关键字,但它似乎在Python中不起作用
self.openConversation_button.Bind(wx.EVT_BUTTON, self.open_conversation, userData="test")
TypeError: _EvtHandler_Bind() got an unexpected keyword argument 'userData'
我已经将萨克森Rolf的解决方案标记为正确的,因为它最适合我的需要,但是我建议一般使用VZ建议的定制事件系统
一般来说,定义自定义事件的建议绝对是正确的,但如果您只需要一个字符串和/或数字,还可以重新调整现有
wxCommandEvent
类的用途,并使用其SetString()
或SetInt()
方法将自定义数据传递到
callback
事件的一种简单方法是使用lambda
函数。e、 g
对于任何一个完全C++的人来说,这里是:
不需要删除
CustomData
实例,wxWidgets会处理它。 这里的关键步骤是:wxClientData
类以附加数据wxEvtHandler::SetClientObject()
wxCommandEvent::GetEventObject()
检索按钮wxEvtHandler::GetClientObject()
检索自定义数据相关问题 更多 >
编程相关推荐