Webbrowser многократно открывает страницы
Я создал функцию open_page(link) которая открывает страницы по ссылке(он нужен как параметр command для виджетов Tkinter, чтобы при нажатии на виджет нас перенаправляли на страницу).Проблема заключается в том, что при запуске браузер открывает сразу все ссылки, не нажав на этот виджет.
def open_link(link):
webbrowser.open(link,new=1)
responce = requests.get(url, headers=headers)
soup = BeautifulSoup(responce.content, 'html.parser')
items = soup.findAll('div', class_='news-item__content')
comps = []
for item in items:
comps.append({'title': item.find('a', class_='news-item__title').get_text(
strip=True), 'link': item.find('a', class_='news-item__title').get('href')})
for comp in comps:
text_for_btn = comp['title']
link_for_article = comp['link']
btn = tk.Button(news, bg='white', text=text_for_btn, font='Colibri 13',relief='flat')
btn.pack(side='top', padx=2, pady=3)
btn.bind('<Button-1>',open_link(link_for_article))
Ответы (1 шт):
Автор решения: Anton Shchyrov
→ Ссылка
Что логично. Вторым параметром в метод bind нужно передать указатель на функцию. А вы вызываете саму функцию. Кроме того, первым параметром в обработчик нужно передать объект-событие. А если вам нужно передавать еще что-то, то нужно определять лямбду.
Итого:
def open_link(event, link):
webbrowser.open(link,new=1)
................
btn.bind('<Button-1>',
lambda e, link = link_for_article: open_link(e, link))