前提・実現したいこと
tkinterとBeautifulSoupを使って、入力したURLからリンクを取得し、listboxに表示させ、URLをクリックするとそのページに飛べるプログラムを作っています。
発生している問題・エラーメッセージ
def urlgetterでglobalを使ってurl = []を更新しようと思っているのですが、urlgetterの外でprint(urls)をすると、[]を返します。
urlgetterの中でprint(urls)をするとリンクのリストが返ってくるのでこちらはちゃんと動いでいます。
def urlgetterのurlsを外のurls = []に代入するにはどうすればいいでしょうか?
該当のソースコード
python3
1from bs4 import BeautifulSoup 2from tkinter import * 3from tkinter import ttk 4import urllib.request 5import webbrowser 6 7urls = [] 8 9def urlgetter(oneurl): 10 global urls 11 try: 12 oneurl = str(oneurl) 13 except ValueError: 14 return entry.delete(0, END) 15 html = urllib.request.urlopen(oneurl) 16 soup = BeautifulSoup(html, "lxml") 17 hrefs = [] 18 for link in soup.find_all("a"): 19 hrefs.append(link.get("href")) 20 hrefs = filter(None, hrefs) 21 pat = "http" 22 for links in hrefs: 23 if pat in links: 24 urls.append(links) 25 return urls 26 27def urljump(evt): 28 wgt = evt.widget 29 print(wgt) 30 idx = wgt.curselection()[0] 31 url = wgt.get(idx) 32 webbrowser.open_new(url) 33 34root = Tk() 35root.title(u'Url Getter') 36root.geometry("300x300") 37 38frame = Frame(root) 39frame.grid() 40 41entry = Entry(frame) 42entry.bind("<Return>", lambda event:urlgetter(entry.get())) 43entry.grid(row=0) 44 45listbox1 = Listbox(frame, width=30) 46for url in urls: 47 listbox1.insert(END, url) 48listbox1.bind("<<ListboxSelet>>", urljump) 49listbox1.grid(row=1, column=0) 50 51scrollbar = Scrollbar(frame, orient=VERTICAL, command=listbox1.yview) 52listbox1['yscrollcommand'] = scrollbar.set 53scrollbar.grid(row=1, column=1, sticky=(N,S)) 54 55root.mainloop()
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/03/28 06:11