Tkinter如何实现两个关联列表框:筛选后同步显示对应数值
核心修改逻辑
你原来的筛选逻辑只提取了dummylist1的匹配结果,没有记录匹配项对应的原下标,因此无法同步获取dummylist2中对应位置的数值。我们只需要调整筛选逻辑,同时记录匹配项的下标,同步更新两个列表框即可。
调整后的characterpressedfunction代码
def characterpressedfunction(e): # 先获取输入的搜索关键词,转小写做不区分大小写匹配 keyword = nsearchentry.get().lower() # 分别存储匹配到的字符串和对应数值 match_alpha = [] match_num = [] # 遍历列表下标,判断对应dummylist1元素是否符合筛选条件 for idx in range(len(dummylist1)): if dummylist1[idx].lower().startswith(keyword): match_alpha.append(dummylist1[idx]) match_num.append(dummylist2[idx]) # 同步更新两个列表框内容 alphabetlist.delete(0, END) for item in match_alpha: alphabetlist.insert(END, item) numberlist.delete(0, END) for item in match_num: numberlist.insert(END, item)
修改后输入关键词时两个列表框会同步展示对应下标的匹配结果,输入框内容清空时会自动恢复全部原始数据。
完整可运行代码
from tkinter import * win = Tk() win.title("test") win.geometry("1000x600") win.resizable(False, False) dummylist2 = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18' , '19', '20'] dummylist1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'a2', 'b1', 'c5', 'd3', 'e8', 'f9', 'g10', 'h4' , 'i6', 'j7'] searchcounter = 0 entercounter = 0 def characterpressedfunction(e): keyword = nsearchentry.get().lower() match_alpha = [] match_num = [] for idx in range(len(dummylist1)): if dummylist1[idx].lower().startswith(keyword): match_alpha.append(dummylist1[idx]) match_num.append(dummylist2[idx]) alphabetlist.delete(0, END) for item in match_alpha: alphabetlist.insert(END, item) numberlist.delete(0, END) for item in match_num: numberlist.insert(END, item) alphabetlist = Listbox(win, width=20, font=('Arial', 15)) numberlist = Listbox(win, width=20, font=('Arial', 15)) alphabetlist.delete(0, END) for item in dummylist1: alphabetlist.insert(END, item) numberlist.delete(0, END) for item in dummylist2: numberlist.insert(END, item) nsearchentry = Entry(win, width=2, font=('Arial', 15)) nsearchentry.bind("<KeyRelease>", characterpressedfunction) numberlist.place(relx=.4, rely=.2) alphabetlist.place(relx=.1, rely=.2) nsearchentry.place(relx=.3, rely=.7) win.mainloop()
内容的提问来源于stack exchange,提问作者neo_codex
相关产品推荐
相关产品推荐

