You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 16:54:02