这是成功在 wxListBox 中显示字典艺术中的值的代码的一部分。 然而,我尝试的返回结果除了下面最后一行的 -1 之外。有人能看出为什么它不起作用吗?
art = {'A1':'Horace Silver', 'A2':'Murray Perahia', 'A3':'Kieth Jarret',
'A4':'Andras Schiff', 'A5':'Tord Gustavsen Trio'}
art = dict(sorted(art.items(), key=lambda item: item[1]))
self.list_box_1.InsertItems(list(art.values()),0)
print(self.list_box_1.FindString('ray', True))
我尝试过区分大小写、字符串、整个单词和部分的单引号和双引号。没有发送错误消息。
我放弃寻找错误,发现这个函数可以工作:-
def checkname(self,l,n):
for i in range(l.GetCount()):
name = l.GetString(i)
x = name.find(n,0)
if x > -1:
return [i, name]
l 是列表框的名称,n 是要查找的字符串。仅限于从头看。
由于
FindString
函数正在寻找标签上的匹配项,因此您需要手动查找部分匹配项。
实现此目的的一种方法是使用
wx.ListBox
GetStrings() 函数,然后进行查询。
像这样: (这里我查询标签“
ra
”,然后将找到的每个项目设置为“选定”)
import wx
class TestListBox(wx.Frame):
def __init__(self, *args, **kwds):
wx.Frame.__init__(self, *args, **kwds)
art = {'A1':'Horace Silver', 'A2':'Murray Perahia', 'A3':'Kieth Jarret',
'A4':'Andras Schiff', 'A5':'Tord Gustavsen Trio'}
art = dict(sorted(art.items(), key=lambda item: item[1]))
self.lb = wx.ListBox(self, wx.NewIdRef(), choices=[], style=wx.LB_EXTENDED|wx.LB_MULTIPLE)
self.lb.InsertItems(list(art.values()),0)
self.lb.Append('Roger the Dodger')
self.lb.Insert('RolfofSaxony', 1)
labels = self.lb.GetStrings()
indicies = self.find_string(labels, 'ra', True)
print("Matches:", indicies)
for item in indicies:
self.lb.SetSelection(item)
self.Show()
def find_string(self, search_list, search_str, caseSensitive=False):
if not caseSensitive:
lowercase_list = [item.lower() for item in search_list]
search_list = lowercase_list
search_str = search_str.lower()
return [index for (index, item) in enumerate(search_list) if search_str in item]
if __name__ == '__main__':
app = wx.App()
TestListBox(None)
app.MainLoop()