对于一般的Bind形式是不能带参数的,比如有一个按钮Button
一个回处理函数OnButton()
,点击Button触发OnButton()函数
self.Bind(wx.EVT_BUTTON, self.OnButton, self.Button)
如果我们想给OnButton()传入额外的参数,比如一个导出excel一个导出csv。但是又不想写两个函数怎么办(完全可以写两个只有一小部分不同的OnButton(),但是十分不简洁)
这时可以加入一个列表循环,列表里是要传的不同参数,每次都新定义一个callback函数,把callback函数放进Bind()里调用,比如下面这个例子就传入了temp这个参数
for temp in ['xlsx','csv']:
def callback(event, temp=temp):
return self.export_excel(event, temp)
if temp == 'xlsx':
self.Bind(wx.EVT_MENU, callback, m_export_excel)
else:
self.Bind(wx.EVT_MENU, callback, m_export_csv)
下面是处理函数的对于传入参数的判断,可以看到只用一小段代码就可以实现功能,而不用写两个处理函数,使代码简洁了很多
def export_excel(self, event, temp):
op = Sql_operation("login_users")
np, fields = op.FindAll("stu_info") # np:数据主体, fields:字段名
if temp == 'csv':
wildcard = 'csv files(.csv)|.csv|xlsx files(.xlsx)|.xlsx|xls files (.xls)|.xls'
else:
wildcard = 'xlsx files(.xlsx)|.xlsx|csv files(.csv)|.csv|xls files (.xls)|.xls'
with wx.FileDialog(self, "导出表格至所选目录", wildcard=wildcard,
style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT, defaultFile='new.'+temp) as fileDialog:
以上参考了https://wiki.wxpython.org/Passing%20Arguments%20to%20Callbacks