wx ListBox 的 FindString() 方法不适合我

问题描述 投票:0回答:1

这是成功在 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 是要查找的字符串。仅限于从头看。

wxpython
1个回答
0
投票

由于

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()

© www.soinside.com 2019 - 2024. All rights reserved.