更新:
阅读您更新的问题后,我查看了代码并进行了一些更改。我将在下面的代码中对其进行分解。
因为您没有提供文本文件的可测试示例,所以我必须使用我认为您正在使用的信息创建自己的示例。
该文件由json 读取,是一个列表列表。以下是该文件的内容:
[
["test 1", "Neverland", "9,000,000", "1000 SQ Miles"],
["test 2", "Ashgard", "1,000,000", "100 SQ Miles"],
["test 3", "Bacon Nation", "3,000,000", "400 SQ Miles"],
["test 4", "Lolzville", "22,000,000", "10000 SQ Miles"]
]
我添加了一个新的导入 json。这将是我所做的其他一些更改所必需的。
from tkinter import *
import json
window=Tk()
window.title("Countries")
lstName=Listbox(window,width=100,height=100)
yscroll=Scrollbar(command=lstName.yview)
yscroll.grid(row=0,column=3,sticky=NS,rowspan=3)
lstName=Listbox(window,width=15,height=10,yscrollcommand=yscroll.set)
lstName.grid(row=0,padx=0,pady=0,sticky=W,columnspan=2,rowspan=3)
yscroll.config(command=lstName.yview)
labelC=Label(window,text="Continent :")
labelC.grid(padx=5,pady=0,row=0,column=4,sticky=W)
labelC=Label(window,text="Population :")
labelC.grid(padx=5,pady=0,row=1,column=4,sticky=W)
labelC=Label(window,text="Area :")
labelC.grid(padx=5,pady=0,row=2,column=4,sticky=W)
在这里,我必须更改 Entry 小部件名称,以便能够针对每个小部件进行后续配置。
entOutput=Entry(window,width=10,state="readonly")
entOutput.grid(padx=5,pady=0,row=0,column=5)
entOutput2=Entry(window,width=10,state="readonly")
entOutput2.grid(padx=5,pady=0,row=1,column=5)
entOutput3=Entry(window,width=10,state="readonly")
entOutput3.grid(padx=5,pady=0,row=2,column=5)
我将我们打开文件的方式更改为使用with open 这将为我们处理文件关闭。我们也可以以类似于with open 语句中的函数的方式执行所有我们需要的东西。我们在这里所做的是将 list.text 文件的内容作为一个名为 loaded_list 的变量加载到全局命名空间中。这将用于程序的其余部分。
with open("list.txt",'r') as l:
loaded_list = json.load(l)
for line in loaded_list:
countryName=line[0]
lstName.insert('end',countryName)
这里我们获取从curselection 返回的元组中的第一个值,并使用它来识别我们之前创建的loaded_list 变量内正确列表的索引。对于每个输入字段,我们必须将其状态更改为正常,对输入字段进行更新,然后将状态更改回“只读”。通过这种方式,所有 3 个字段都可以使用相应字段的预定义索引进行更新。
def conselect(evt):
value = lstName.curselection()[0]
templist = loaded_list[value]
entOutput.config(state = NORMAL)
entOutput.delete(0, END)
entOutput.insert(0, templist[1])
entOutput.config(state = "readonly")
entOutput2.config(state = NORMAL)
entOutput2.delete(0, END)
entOutput2.insert(0, templist[2])
entOutput2.config(state = "readonly")
entOutput3.config(state = NORMAL)
entOutput3.delete(0, END)
entOutput3.insert(0, templist[3])
entOutput3.config(state = "readonly")
lstName.bind('<<ListboxSelect>>',conselect)
window.mainloop()
这是它如何工作的图片:
这里是完整的代码供你复制:
from tkinter import *
import json
window=Tk()
window.title("Countries")
lstName=Listbox(window,width=100,height=100)
yscroll=Scrollbar(command=lstName.yview)
yscroll.grid(row=0,column=3,sticky=NS,rowspan=3)
lstName=Listbox(window,width=15,height=10,yscrollcommand=yscroll.set)
lstName.grid(row=0,padx=0,pady=0,sticky=W,columnspan=2,rowspan=3)
yscroll.config(command=lstName.yview)
labelC=Label(window,text="Continent :")
labelC.grid(padx=5,pady=0,row=0,column=4,sticky=W)
labelC=Label(window,text="Population :")
labelC.grid(padx=5,pady=0,row=1,column=4,sticky=W)
labelC=Label(window,text="Area :")
labelC.grid(padx=5,pady=0,row=2,column=4,sticky=W)
entOutput=Entry(window,width=10,state="readonly")
entOutput.grid(padx=5,pady=0,row=0,column=5)
entOutput2=Entry(window,width=10,state="readonly")
entOutput2.grid(padx=5,pady=0,row=1,column=5)
entOutput3=Entry(window,width=10,state="readonly")
entOutput3.grid(padx=5,pady=0,row=2,column=5)
with open("list.txt",'r') as l:
loaded_list = json.load(l)
for line in loaded_list:
countryName=line[0]
lstName.insert('end',countryName)
def conselect(evt):
value = lstName.curselection()[0]
templist = loaded_list[value]
entOutput.config(state = NORMAL)
entOutput.delete(0, END)
entOutput.insert(0, templist[1])
entOutput.config(state = "readonly")
entOutput2.config(state = NORMAL)
entOutput2.delete(0, END)
entOutput2.insert(0, templist[2])
entOutput2.config(state = "readonly")
entOutput3.config(state = NORMAL)
entOutput3.delete(
0, END)
entOutput3.insert(0, templist[3])
entOutput3.config(state = "readonly")
lstName.bind('<<ListboxSelect>>',conselect)
window.mainloop()