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))
→ Ссылка