Wxpython Bind增加传参

对于一般的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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值