python - 在 wxPython 中搜索所有出现的字符串的网格
问题描述
我想搜索一个网格并找到所有包含与 Excel 的查找功能(CTRL + F)非常相似的字符串的单元格。然后使用 Next 和 Previous 按钮导航到这些单元格。我知道我可以使用循环来构建列表,但我的一些表有 60,000 多条记录,我试图避免过多的滞后时间。我的替代方法是搜索填充我的网格的数据框。
有没有人已经为此构建了一个功能?我觉得这将是一项常见的任务,但没有太多可用的。我正在寻找所有出现的不区分大小写的部分匹配。
import wx.grid
class SimpleGrid(wx.grid.Grid):
def __init__(self, parent):
wx.grid.Grid.__init__(self, parent, -1)
self.CreateGrid(9, 2)
self.SetColLabelValue(0, "First")
self.SetColLabelValue(1, "Last")
self.SetRowLabelValue(0, "1")
self.SetCellValue(0, 0, "AA")
self.SetCellValue(0, 1, "A")
self.SetRowLabelValue(1, "2")
self.SetCellValue(1, 0, "BA")
self.SetCellValue(1, 1, "B")
self.SetRowLabelValue(2, "3")
self.SetCellValue(2, 0, "C")
self.SetCellValue(2, 1, "C")
self.SetRowLabelValue(3, "4")
self.SetCellValue(3, 0, "D")
self.SetCellValue(3, 1, "D")
self.SetRowLabelValue(4, "5")
self.SetCellValue(4, 0, "E")
self.SetCellValue(4, 1, "E")
self.SetRowLabelValue(5, "6")
self.SetCellValue(5, 0, "F")
self.SetCellValue(5, 1, "F")
self.SetRowLabelValue(6, "7")
self.SetCellValue(6, 0, "G")
self.SetCellValue(6, 1, "G")
self.SetRowLabelValue(7, "8")
self.SetCellValue(7, 0, "K")
self.SetCellValue(7, 1, "K")
self.SetRowLabelValue(8, "9")
self.SetCellValue(8, 0, "L")
self.SetCellValue(8, 1, "L")
def on_key(self, event):
if event.ControlDown() and event.GetKeyCode() == 70: #CTRL + F
self.searchValue(event)
else:
event.Skip()
print('error')
def searchValue(self, event):
print("search entire grid")
class TestFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, -1, "A Grid",
size=(400, 400))
self.p = wx.Panel(self)
self.grid = SimpleGrid(self)
self.searchbox =wx.TextCtrl(self.p)
self.btn = wx.Button(self.p, label = "OK")
self.btn_previous = wx.Button(self.p, label = "Previous")
self.btn_next = wx.Button(self.p, label = "Next")
self.btn.Bind(wx.EVT_BUTTON, self.searchValue)
self.btn_previous.Bind(wx.EVT_BUTTON, self.previousValue)
self.btn_next.Bind(wx.EVT_BUTTON, self.nextValue)
self.sizer = wx.BoxSizer(wx.HORIZONTAL)
self.sizer.Add(self.btn_previous,proportion = 1,flag = wx.ALL|wx.EXPAND,border = 5)
self.sizer.Add(self.btn_next,proportion = 1,flag = wx.ALL|wx.EXPAND,border = 5)
self.mainsizer = wx.BoxSizer(wx.VERTICAL)
self.mainsizer.Add(self.grid,proportion = 0, flag = wx.ALL|wx.EXPAND,border = 5)
self.mainsizer.Add(self.searchbox,proportion = 1,flag = wx.ALL|wx.EXPAND,border = 5)
self.mainsizer.Add(self.btn,proportion = 1,flag = wx.ALL|wx.EXPAND,border = 5)
self.mainsizer.Add(self.sizer,proportion = 1,flag = wx.ALL|wx.EXPAND,border = 5)
self.p.SetSizerAndFit(self.mainsizer)
def searchValue(self, event):
print("Get row, col location of all occurences for: " + str(self.searchbox.GetValue()))
def nextValue(self,event):
print("NEXT")
def previousValue(self,event):
print("PREVIOUS")
app = wx.App()
frame = TestFrame(None)
frame.Show(True)
app.MainLoop()
解决方案
推荐阅读
- c++ - 假装元素的自定义迭代器在向量中
- android - netflix 或 google 等视频播放器如何处理显示/隐藏视频播放器控件?
- type-conversion - 比较任意两项最有效的运算符是什么?
- reactjs - 为什么 mobx observable 在递归组件中未定义?
- java - 为什么我会收到 InputMismatchException?
- ruby-on-rails - 不使用 RAILS_ENV=development 时连接到 Postgres docker 映像的问题
- json - Eventbride API time_filter 参数不起作用
- firebase - Firebase 电子邮件验证 Flutter
- java - 如何使 JavaFX TreeView 和 TreeItem 可序列化?
- python - 解压 Numpy 数组列表