How to load a url which is in entry widget of tkinter which is linked with saved user input of a list in list-box?

孤街浪徒 提交于 2020-04-30 06:29:52

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!