Строка Python webbrowser.open открывает две вкладки, когда она не должна

Ниже у меня есть следующий код, который открывает правильный URL после открытия неправильного. Я знаю, что ссылка не генерируется дважды из-за вывода на печать (ссылка). Так что одна ссылка как-то открывает две вкладки в моем браузере, и я понятия не имею, почему. Любые мысли будут оценены!

Я использую Python 3.6 на Windows 10.

from PIL import Image, ImageEnhance, ImageFilter
import pyscreenshot as ImageGrab
import pytesseract
import webbrowser
import urllib

# I have other code in the middle that is not important

query = textQ
query_encoded = urllib.parse.quote_plus(query)
link = 'http://google.com/search?q='+ query_encoded
print(link)
webbrowser.open_new_tab(link)

РЕДАКТИРОВАТЬ 1, почему этот код ниже открывает две вкладки?

from PIL import Image, ImageEnhance, ImageFilter
import pyscreenshot as ImageGrab
import pytesseract
import webbrowser
import urllib


pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-
OCR/tesseract'


if __name__ == "__main__":
    # part of the screen
    img=ImageGrab.grab()
    img.save('screenshot.png')
#-#


query = "textQ"
query_encoded = urllib.parse.quote_plus(query)
link = 'http://google.com/search?q='+ query_encoded
print(link)
webbrowser.open_new_tab(link)

1 ответ

Я столкнулся с той же проблемой, когда пытался сделать ссылки кликабельными в текстовом редакторе. Я использую Python 2.7.13 в Windows 10, использую gtk в текстовом редакторе, и я обнаружил, что причиной моей проблемы является обработка событий.

Я подозреваю, что ваш другой "неважный код" может вызывать проблемы, поскольку я не смог воспроизвести ошибку с кодом, который вы указали в своем вопросе. Я не знаю, применима ли моя проблема / решение, но я надеюсь, что это поможет:

Идентификация проблемы: текстовый редактор, над которым я работаю, обнаруживает изменения в текстовом буфере и автосохраняет. При автосохранении он связывает сигнал нажатия кнопки с обработчиком hyperlink_clicked_handler. Поэтому моя проблема заключалась в том, что новое соединение с обработчиком выполнялось всякий раз, когда он автоматически сохранялся (когда я редактировал текст). С этого момента нажатие на ссылку активирует обработку сигналов в нескольких обработчиках, что открывает URL-адрес в новой вкладке каждый, следовательно, открывая несколько вкладок.

Решение. Перед подключением обработчика проверьте, подключен ли обработчик, чтобы был подключен только один обработчик.

Надеюсь это поможет

Другие вопросы по тегам