问题
My Problem is described in these following steps:
1. Opened Application
2. Typed name = Mike ; id = 11 ; url = www.google.com
3. Clicked on "Add"
4. Closed the application.
5. Again Run the application.
6. Shows "Mike = 11" in the list box.
7. But when I select "Mike = 11" and click on "load" , it does not take me to "www.google.com", Why?
Please give me some solutions about how can I open a URL attaching with saved list.
Please HELP me!!
from tkinter import*
import webbrowser
def add():
name = entry1.get()
id = entry2.get()
listbox.insert(END, name+ " : " +id)
def delete():
select = listbox.curselection()
index = select[0]
listbox.delete(index)
def save():
with open("file.txt","w") as f:
for i in listbox.get(0,END):
f.write(i+"\n")
#f.close()
def load():
url = entry3.get()
select=listbox.curselection()
index=select[0]
webbrowser.open(index)
read = open("file.txt","r")
data_list = read.readlines()
read.close()
data_list = [data.rstrip() for data in data_list]
win = Tk()
win.title("Class")
frame1=Frame(win)
frame2=Frame(win)
frame1.pack()
frame2.pack()
label1 = Label(frame1,text="Name : ")
label1.grid(row=0,column=0)
label2 = Label(frame1,text="Id : ")
label2.grid(row=1,column=0)
label3 = Label(frame1,text="Url : ")
label3.grid(row=2,column=0)
name = StringVar()
entry1 = Entry(frame1,textvariable=name)
entry1.grid(row=0,column=1)
id = StringVar()
entry2 = Entry(frame1,textvariable=id)
entry2.grid(row=1,column=1)
url = StringVar()
entry3 = Entry(frame1,textvariable=url)
entry3.grid(row=2,column=1)
scrollbar = Scrollbar(frame2,orient=VERTICAL)
listbox = Listbox(frame2,selectmode=EXTENDED,yscrollcommand=scrollbar.set,width=60)
listbox.pack()
scrollbar.config(command=listbox)
for item in data_list:
listbox.insert(END,item)
button1 = Button(frame2,text="Add",command=add)
button1.pack()
button2 = Button(frame2,text="Delete",command=delete)
button2.pack()
button3 = Button(frame2,text="Save to File",command=save)
button3.pack()
button4 = Button(frame2,text="Load Url",command=load)
button4.pack()
win.mainloop()
回答1:
You need to use two list.one list saves data
in the file,this could be seen in the Listbox
.The another list is to save the url
in the file.this couldn't be seen.And also you need to synchronize them.(save()
,delete()
,add()
need to operate both Listbox
widget and the list
).A minimal example.:
from tkinter import*
import webbrowser
def add():
name = entry1.get()
id = entry2.get()
url = entry3.get()
url_list.append(url)
listbox.insert(END, name+ " : " +id)
def delete():
select = listbox.curselection()
index = select[0]
url_list.pop(index)
listbox.delete(index)
def save():
with open("file.txt","w") as f:
for i,j in zip(listbox.get(0,END),url_list):
f.write(f"{i} Url:{j}\n")
def load():
select=listbox.curselection()
index=select[0]
load_url = url_list[index]
webbrowser.open(load_url)
read = open("file.txt","r")
data_url_list = read.readlines()
read.close()
data_list = [data.rstrip().split("Url")[0] for data in data_url_list]
url_list = [data.rstrip().split("Url:")[1] for data in data_url_list]
win = Tk()
win.title("Class")
frame1=Frame(win)
frame2=Frame(win)
frame1.pack()
frame2.pack()
label1 = Label(frame1,text="Name : ")
label1.grid(row=0,column=0)
label2 = Label(frame1,text="Id : ")
label2.grid(row=1,column=0)
label3 = Label(frame1,text="Url : ")
label3.grid(row=2,column=0)
name = StringVar()
entry1 = Entry(frame1,textvariable=name)
entry1.grid(row=0,column=1)
id = StringVar()
entry2 = Entry(frame1,textvariable=id)
entry2.grid(row=1,column=1)
url = StringVar()
entry3 = Entry(frame1,textvariable=url)
entry3.grid(row=2,column=1)
scrollbar = Scrollbar(frame2,orient=VERTICAL)
listbox = Listbox(frame2,selectmode=EXTENDED,yscrollcommand=scrollbar.set,width=60)
listbox.pack()
scrollbar.config(command=listbox)
for item in data_list:
listbox.insert(END,item)
button1 = Button(frame2,text="Add",command=add)
button1.pack()
button2 = Button(frame2,text="Delete",command=delete)
button2.pack()
button3 = Button(frame2,text="Save to File",command=save)
button3.pack()
button4 = Button(frame2,text="Load Url",command=load)
button4.pack()
win.mainloop()
In this example,the format in the file:
name : id Url:xxxxxx
You also could use another way to save them and read them.
来源:https://stackoverflow.com/questions/61382252/how-to-load-a-url-which-is-in-entry-widget-of-tkinter-which-is-linked-with-saved