当我点击列表框时出现问题,在我的程序中,我点击了列表框会出现一个视频。我在数据库中做了一个样本“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
答案 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()