鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: lengyue869

Combobox怎么实现模糊匹配?

[复制链接]
 楼主| 发表于 2021-1-8 13:25:39 | 显示全部楼层
qq1151985918 发表于 2021-1-8 12:27
你先研究着,我也还在想修改的办法,如果改成功了会告诉你

okey
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-8 13:36:01 | 显示全部楼层
qq1151985918 发表于 2021-1-8 12:27
你先研究着,我也还在想修改的办法,如果改成功了会告诉你

下面这个是用entry跟listbox也可以实现模糊匹配

  1. import tkinter as tk


  2. def on_keyrelease(event):
  3.     # get text from entry
  4.     value = event.widget.get()
  5.     value = value.strip().lower()

  6.     # get data from test_list
  7.     if value == '':
  8.         data = test_list
  9.     else:
  10.         data = []
  11.         for item in test_list:
  12.             if value in item.lower():
  13.                 data.append(item)

  14.     # update data in listbox
  15.     listbox_update(data)


  16. def listbox_update(data):
  17.     # delete previous data
  18.     listbox.delete(0, 'end')

  19.     # sorting data
  20.     data = sorted(data, key=str.lower)

  21.     # put new data
  22.     for item in data:
  23.         listbox.insert('end', item)


  24. def on_select(event):
  25.     # display element selected on list
  26.     print('(event) previous:', event.widget.get('active'))
  27.     print('(event)  current:', event.widget.get(event.widget.curselection()))
  28.     print('---')


  29. # --- main ---

  30. test_list = ('690-1G150', '690-1G151', '699-1G151', '900-1G180', '699-1G180')

  31. root = tk.Tk()

  32. entry = tk.Entry(root)
  33. entry.pack()
  34. entry.bind('<KeyRelease>', on_keyrelease)

  35. listbox = tk.Listbox(root)
  36. listbox.pack()
  37. # listbox.bind('<Double-Button-1>', on_select)
  38. listbox.bind('<<ListboxSelect>>', on_select)
  39. listbox_update(test_list)

  40. root.mainloop()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-8 13:42:43 | 显示全部楼层
lengyue869 发表于 2021-1-8 13:36
下面这个是用entry跟listbox也可以实现模糊匹配

这个我想过,难度比你找到的小很多。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-8 14:05:05 | 显示全部楼层
qq1151985918 发表于 2021-1-8 13:42
这个我想过,难度比你找到的小很多。

代码贴我看看呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-8 14:12:02 From FishC Mobile | 显示全部楼层
lengyue869 发表于 2021-1-8 14:05
代码贴我看看呗

等我给你敲一下代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-8 15:45:56 | 显示全部楼层

敲完代码发现是跟你后贴的一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-8 15:46:26 | 显示全部楼层
  1. import tkinter

  2. def newlistbox(oldlist):
  3.     gettext = entry.get()
  4.     newlist = sorted(oldlist, key=str.lower)
  5.     listbox.delete(0, 'end')
  6.     for each in newlist:
  7.         if gettext in each:
  8.             listbox.insert('end', each)
  9.     listbox.selection_set(0)
  10.     listbox.bind('<<ListboxSelect>>', newtext)

  11. def newtext(event):
  12.     v = event.widget.curselection()
  13.     text = event.widget.get(v)
  14.     entry.delete(0, 'end')
  15.     entry.insert(0, text )
  16.         
  17. def textchange(event):
  18.     newlist = []
  19.     gettext = event.widget.get().strip().lower()
  20.     if event.keysym:
  21.         if gettext:
  22.             for each in testlist:
  23.                 if gettext in each.lower():
  24.                     newlist.append(each)
  25.         else:
  26.             newlist = testlist
  27.     newlistbox(newlist)

  28. root = tkinter.Tk()
  29. entry = tkinter.Entry(root)
  30. listbox = tkinter.Listbox(root)
  31. entry.bind('<KeyRelease>', textchange)
  32. entry.grid(row=0, column=0)
  33. listbox.grid(row=1, column=0)



  34. testlist = ('apple', 'banana', 'Cranberry',
  35.             'dogwood', 'alpha', 'Acorn',
  36.             'Anise', 'Strawberry' )
  37. newlistbox(testlist)

  38. root.mainloop()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-8 15:48:16 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-8 15:51:07 | 显示全部楼层

所以我问你 怎么做到的输入文字能显示下拉列表,如果Combobox有一个textchange事件或者能够实现的话,就能够做到模糊匹配了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-8 15:52:25 | 显示全部楼层
qq1151985918 发表于 2021-1-8 15:51
所以我问你 怎么做到的输入文字能显示下拉列表,如果Combobox有一个textchange事件或者能够实现的话,就 ...

Combobox不行的話就用entry+listbox吧,能達到效果就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-8 15:53:17 | 显示全部楼层
lengyue869 发表于 2021-1-8 15:52
Combobox不行的話就用entry+listbox吧,能達到效果就可以了

嗯嗯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 03:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表