wxpython多部件绑定

在使用wxpython时我们经常需要为部件绑定功能。

我以为当存在多个需要绑定相同功能的部件时,存在以下几种方法:

        一、一个部件绑定一个功能

        二、都绑定到同一个功能,再在函数中进行判断触发的部件是哪一个

第一种十分浪费时间精力,而且会大幅度增长代码。

本篇文章简单的描述一下第二种方法

class main_label():
    def __init__(self):
        app = wx.App()       #创建wx对象
        frame = wx.Frame(None, title="我是帅比", size=(600, 225))
        self.text1 = wx.StaticText(frame, -1, '文本1', pos=(150, 30))

        self.textctrl1 = wx.TextCtrl(frame, -1, u'123', pos=(150, 55), size=(260, 25))  #文本框1
        self.inputbt1 = wx.Button(frame, -1, '导入', pos=(415, 55), size=(70, 25))

        self.text2 = wx.StaticText(frame, -1, '文本2', pos=(150, 85))

        self.textctrl2 = wx.TextCtrl(frame, -1, u'123', pos=(150, 105), size=(260, 25))
        self.inputbt2 = wx.Button(frame, -1, '导入', pos=(415, 105), size=(70, 25))

        self.inputbt3 = wx.Button(frame, -1, '生成request', pos=(150, 140), size=(130, 30))
        self.inputbt4 = wx.Button(frame, -1, 'Mapping', pos=(360, 140), size=(130, 30))

        textctrl_list_str=['self.textctrl{}'.format(i) for i in range(1,3)] #将对象名以字符串形式储存
        button_list_str=['self.inputbt{}'.format(i) for i in range(1,3)]
        self.textctrl_list=[]
        for i in textctrl_list_str:
            self.textctrl_list.append(eval(i))   #通过eval将字符串重新转为对象
        self.button_list=[]
        for i in button_list_str:
            self.button_list.append(eval(i))

        self.inputbt1.Bind(wx.EVT_BUTTON, self.input_xlsx)

        # self.inputbt3.Bind(wx.EVT_BUTTON, self.filling)
        for t in self.textctrl_list:
            t.Bind(wx.EVT_LEFT_DCLICK, lambda x,textctrl =t:self.textctrl_k(event=x,textctrl=textctrl))        #为对象绑定功能
        for t in self.button_list:
            t.Bind(wx.EVT_BUTTON, lambda x,textctrl =t:self.input_xlsx(event=x,textctrl=textctrl))

        frame.SetBackgroundColour('white')
        frame.Show()
        app.MainLoop()

    def input_xlsx(self, event,textctrl):
        index_num = self.button_list.index(textctrl)     #获得触发部件的索引
        btn = event.GetEventObject()
        btn.Disable()


        files = "EXCEL工作簿(*.xlsx;*.xls)|*.xlsx;*.xls|" "EXCEL工作簿(*.xlsx)|*.xlsx|" "EXCEL工作簿(*.xls)|*.xls"

        file_dir = wx.FileDialog(None, message="选择导入路径", wildcard=files, style=wx.FD_OPEN)
        if file_dir.ShowModal() == wx.ID_OK:  # wx.ID_OK是判断结果,并执行相应程序
            self.textctrl_list[index_num].SetValue(file_dir.GetPath())    #设定按键对应文本框内容

        btn.Enable()

    def textctrl_k(self, event, textctrl):

        index_num = self.textctrl_list.index(textctrl)

        if "123" in self.textctrl_list[index_num].GetValue():
            self.textctrl_list[index_num].ChangeValue("")
        self.textctrl_list[index_num].SetFocus()
        if self.textctrl_list[index_num].GetValue() != "":
            self.textctrl_list[index_num].Unbind(wx.EVT_LEFT_DOWN)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值