WX.EVT_LISTBOX_DCLICK点击查看不同的视频

时间:2015-04-08 02:37:59

标签: python video hyperlink listbox wxpython

当我点击列表框时出现问题,在我的程序中,我点击了列表框会出现一个视频。我在数据库中做了一个样本“name_link”,它将出现在列表框中。 Video1,Video2,Video3。每个name_link都有不同的视频。但是,每次我点击其中一个name_link,只出现Video3的视频时,就会发生这种情况。当我点击name_link video1 video2出现或始终Video3。我对这部分感到很困惑。

点击期间的此部分:

self.opt = wx.ListBox(pan1, -1, pos=(10, 210), size=(480, 250), style= wx.TE_MULTILINE | wx.BORDER_SUNKEN)

def playFile(self, event):
    self.player.Play()

def OnEnter(self, event):
    self.opt.SetLabel(self.PatMatch()) 

def PatMatch(self):
    con = sqlite3.connect('test.db')    
    with con:
        cur = con.cursor()
        for row in cur.execute("Select * From Video"):
            klmt = self.inpt.GetValue()
            if row[1] in klmt.lower():  
                self.opt.Append(row[2])         
               self.player.Load(row[4])
        return self.Bind(wx.EVT_LISTBOX_DCLICK, self.playFile, self.op)

这样的数据库:

id  word        name_link   explain     link
--- ------      ----------- ---------   --------
1   python      Video1      test        C:\Users\Ihsan\Downloads\Video1.MP4
2   python      Video2      test1       C:\Users\Ihsan\Downloads\Video2.MP4
3   python      Video3      test2       C:\Users\Ihsan\Downloads\Video3.MP4

1 个答案:

答案 0 :(得分:0)

您应该使用ClientData作为列表中的项目。请检查以下快速代码。通过使用ClientData,您可以显示项目的不同标签,并为每个项目存储必要的数据。

import wx

db = [
          {"id": 1, "name_link": "Video 1", "link": "C:\\first_video.mp4"},
          {"id": 2, "name_link": "Video 2", "link": "C:\\second_video.mp4"},
          {"id": 3, "name_link": "Video 3", "link": "C:\\third_video.mp4"},
      ]

class MyFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, parent=None, title="List of Videos")

        self.opt = wx.ListBox(self)
        self.fillOpt()

        self.opt.Bind(wx.EVT_LISTBOX_DCLICK, self.startVideo)
        self.Show()

    def fillOpt(self):
        for row in db:
            self.opt.Append(row['name_link'], row['link']) # Label, ClientData

    def startVideo(self, event):
        wx.MessageBox(parent=self, message=event.GetClientData(), caption="Video")


if __name__ == '__main__':
    app = wx.App(False)
    frame = MyFrame()
    app.MainLoop()