交互式列表框 Tkinter

1 投票
1 回答
619 浏览
提问于 2025-04-18 10:40

我在用户界面上有两个列表框,分别叫做 pbsf,它们是并排放置的。在 pbs 中,我有一系列问题,每个问题都有几个相关的文件名。我希望当我点击 pbs 中的某个问题时,f 中能显示出对应的文件列表。目前我已经成功获取了在 pbs 中选中选项的索引,并且在第一次点击后文件能正确显示,但在多次点击后,显示的文件却是其他问题的,而不是我选中的那个。

另外,我也不太确定我是否正确地存储了索引。我尝试了两种方法:

  1. 把问题和文件的名称存储在一个字典里——但这里的问题是我的条目是有顺序的,而我不想要这个;我希望它们的顺序和我输入时完全一致。
  2. 有一个问题的列表和一个文件的列表——但这里的问题是我无法将列表框中的索引获取为整数。

这些是问题和文件(以字典和列表的形式):

problems = {
'pb_1':['1.txt','2.txt','3.txt'],
'pb_a':['a_1.txt','a_2.txt','a_3.txt']
}

problems=['pb_1','pb_a']
files=[['1.txt','2.txt','3.txt'],['a_1.txt','a_2.txt','a_3.txt']]

这是代码:

def immd(e):
    for i in problems[pbs.get('active')]:
        f.insert(END,i)

root = Tk()
root.title('Title') 

frame2 = Frame(root)
frame2.pack(side=RIGHT)
l3 = Label(frame2, text='Problems:').grid(row=0,column=0)
pbs = Listbox(frame2, height=10)
pbs.grid(row=1,column=0)
for i in problems:
    pbs.insert(END,i)
pbs.bind('<<ListboxSelect>>',immd)

l4 = Label(frame2, text='Files:').grid(row=0,column=1)
f = Listbox(frame2, height=10)
f.grid(row=1,column=1)

root.mainloop()

1 个回答

2

通过使用 Listbox.curselection,你可以获取选中项的索引。索引是一个字符串列表;你需要把这些字符串转换成整数。

def immd(e):
    indice = pbs.curselection()
    index = int(indice[0])
    ....

撰写回答