wxPython ListBox事件未触发

时间:2017-01-24 15:44:40

标签: events listbox wxpython

我有一个包含按钮和2个ListBox的wx.Dialog,按钮findAppBtn搜索目录列表,然后在actListBox中显示结果。从actListBox选择您选择的目录应该会触发调用EVT_LISTBOX的事件actListBoxList。此函数在目录上执行ls,并应使用Append列出它在下方列表框binListBox中找到的文件。从下方ListBox中选择一个项目后,窗口将关闭。

问题是,当选择一个项目时,self.Bind(EVT_LISTBOX, self.actListBoxList)似乎没有被触发。

(也请原谅不良编码,我试图让它在缩小之前工作)

    self.findAppBtn = wx.Button(panel, -1, "Find app")
    self.findAppBtn.SetDefault()
    self.Bind(wx.EVT_BUTTON, self.startConf, self.findAppBtn)
    hBox2.Add(self.findAppBtn, 0, flag=wx.LEFT, border=5)
    vBox.Add(hBox2, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP|wx.BOTTOM, border=3)

    self.actListBox = wx.ListBox(panel, choices=[])
    self.Bind(wx.EVT_LISTBOX, self.actListBoxList)
    vBox.Add(self.actListBox, 2, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP|wx.BOTTOM, border=3)

    self.binListBox = wx.ListBox(panel, choices=[])
    self.Bind(wx.EVT_LISTBOX, self.binListBoxList)
    vBox.Add(self.binListBox, 2, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP|wx.BOTTOM, border=3)

    self.closeBtn = wx.Button(panel, wx.ID_OK)
    hBox4.Add(self.closeBtn, 0, flag=wx.LEFT, border=5)

    vBox.Add(hBox4, 0, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.BOTTOM, border=5)

    panel.SetSizer(vBox)


def startConf(self,e):
    val = self.cmdTxt.GetValue().replace(" ","\ ")
    path = "/private/"
    aCmd = "find " + path + " -iname '*"+val+"*.app'"
    try:
        s = pxssh.pxssh()
        s.login(sshIP, "root", sshPort, sshPass)
        s.sendline(aCmd)
        s.prompt()
        AP = s.before
        for m in AP.split('\n'):
            if path in m:
                self.actListBox.Append(m.replace(path,"").strip())
        s.logout()
        return path
    except pxssh.ExceptionPxssh as e:
        self.parent.progressBox.AppendText(str(e))


def actListBoxList(self,e):
    #get string from top box selection e.g xxxx-xxxx-xxxx-/myapp.app
    selName = self.actListBox.GetStringSelection() 
    path = "/private/"
    #list all the files in the dir from top box selection
    aCmd = "ls " + path + selName
    try:
        s = pxssh.pxssh()
        s.login(sshIP, "root", sshPort, sshPass)
        s.sendline(aCmd)
        s.prompt()
        ls = s.before
        for file in ls.split('\n'):
            if not file.endswith("/"):
                reg = r"\..*"
                matchObj = re.search(reg, file)
                if not matchObj:
                    self.binListBox.Append(file)
        s.logout()
    except pxssh.ExceptionPxssh as e:
        self.parent.progressBox.AppendText(str(e))

def binListBoxList(self,e):
    binaryName = self.binListBox.GetStringSelection()
    self.Close()

编辑:self.actListBox.Bind(wx.EVT_LISTBOX, self.actListBoxList)解决了这个问题。

1 个答案:

答案 0 :(得分:2)

调用self.Bind(...将事件绑定到父窗口,这就是为什么你没有看到被调用的事件。而是绑定到列表框:

self.actListBox.Bind(wx.EVT_LISTBOX, self.actListBoxList)