gpt4 book ai didi

python - 如何根据某些搜索字符串更新 wxPython ListBox?

转载 作者:行者123 更新时间:2023-11-28 18:34:28 24 4
gpt4 key购买 nike

问题:

如何根据搜索字符串更新wx.ListBox?实际上:- 我有 2 个对象:wx.TextCtrl + wx.ListBox- 操作:一旦在 wx.TextCtrl 中写下文本,列表 wx.ListBox 应该用匹配更新

我的代码:

def updateList(event):
# Get all values from wx.ListBox obj
searchTerm = str([textareaExpectedResults.GetString(i) for i in range(textareaExpectedResults.GetCount())])
print searchTerm
# Get match
matchValues = sorted(['entry', 'test'])
textareaExpectedResults.Clear()
i = 0
for item in matchValues:
if searchTerm.lower() in item.lower():
i += 1
textareaExpectedResults.Append(item)
else:
print "not found"
pass

# Bind the function to search box
searchExpectedResults.Bind(wx.EVT_CHAR, updateList)

当前输出:

开始写的时候没找到

期望的输出:

获取匹配项,当我开始写作时。 (如果我输入:“en”,那么应用程序应该获取选项“entry”。自然地,该条目存在于列表框中)请分享这方面的提示。

编辑 1:

# Basic app 

import wx
app = wx.App(redirect=False)
top = wx.Frame(None)
top.SetSize(320,280)
sizer = wx.GridBagSizer()

def on_char(event):
getValue = searchExpectedResults.GetValue() # get the entered string in TextCtrl with GetValue method
print getValue
search_items = sorted(['test', 'entry']) # Create a list of all searchable items in a list
for item in search_items:
if getValue in item:
print item
textareaExpectedResults.Clear()
textareaExpectedResults.Append(item) # Clear the ListBox and append the matching strings in search_items to the ListBox

searchExpectedResults = wx.TextCtrl(top, -1, "", size=(175, -1))
sizer.Add(searchExpectedResults,(2,8),(2,14),wx.EXPAND)
searchExpectedResults.Bind(wx.EVT_CHAR, on_char) # Bind an EVT_CHAR event to your TextCtrl
search_items = sorted(['test', 'entry'])
textareaExpectedResults = wx.ListBox(top, choices=search_items, size=(270,250))
sizer.Add(textareaExpectedResults,(6,8),(2,14),wx.EXPAND)
top.Sizer = sizer
top.Sizer.Fit(top)
top.Show()
app.MainLoop()

最佳答案

这里有一个逐步指导如何实现您的期望

  1. 创建列表中所有可搜索项目的列表,例如将其命名为 search_items
  2. EVT_CHAR 事件绑定(bind)到您的 TextCtrl,例如将您的事件处理程序命名为 on_char
  3. on_char方法中,通过GetValue方法获取在TextCtrl中输入的字符串
  4. 清除ListBox并将search_items中的匹配字符串附加到ListBox

注意:不要忘记为每个字符事件清除 ListBox。如果您的可搜索项目列表太大,您应该使用不同于清除/附加方法的方法。


编辑:

在审查了您的代码后,我按照您的要求修复了它,没有做太多更改。我使用 wx.EVT_KEY_UP 是因为当您的处理程序被 wx.EVT_CHAR 事件调用时,您无法获取 wx.TextCtrl 的最新值。如果你坚持使用wx.EVT_CHAR,你可以使用wx.CallAfterdef on_char(event) 中提供回调函数,保证在 wx.EVT_CHAR 完成后执行。注意:你在 for 循环中调用了 textareaExpectedResults.Clear() 是错误的,我也在 for 循环之前移动了它。

import wx
app = wx.App(redirect=False)
top = wx.Frame(None)
top.SetSize((320, 280))
sizer = wx.GridBagSizer()

def on_char(event):
event.Skip()
getValue = searchExpectedResults.GetValue() # get the entered string in TextCtrl with GetValue method
print getValue
search_items = sorted(['test', 'entry']) # Create a list of all searchable items in a list
textareaExpectedResults.Clear()
for item in search_items:
if getValue in item:
print item
textareaExpectedResults.Append(item) # Clear the ListBox and append the matching strings in search_items to the ListBox

searchExpectedResults = wx.TextCtrl(top, -1, "", size=(175, -1))
sizer.Add(searchExpectedResults, (2, 8), (2, 14), wx.EXPAND)
searchExpectedResults.Bind(wx.EVT_KEY_UP, on_char) # Bind an EVT_CHAR event to your TextCtrl
search_items = sorted(['test', 'entry'])
textareaExpectedResults = wx.ListBox(top, choices=search_items, size=(270, 250))
sizer.Add(textareaExpectedResults, (6, 8), (2, 14), wx.EXPAND)
top.Sizer = sizer
top.Sizer.Fit(top)
top.Show()
app.MainLoop()

如果你想使用wx.EVT_CHAR,这里有一个例子展示了如何使用wx.CallAfter

...
def on_filter():
getValue = searchExpectedResults.GetValue() # get the entered string in TextCtrl with GetValue method
print getValue
search_items = sorted(['test', 'entry']) # Create a list of all searchable items in a list
textareaExpectedResults.Clear()
for item in search_items:
if getValue in item:
print item
textareaExpectedResults.Append(item) # Clear the ListBox and append the matching strings in search_items to the ListBox

def on_char(event):
event.Skip()
wx.CallAfter(on_filter)

...
searchExpectedResults.Bind(wx.EVT_CHAR, on_char) # Bind an EVT_CHAR event to your TextCtrl
...

关于python - 如何根据某些搜索字符串更新 wxPython ListBox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33783727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com