Строка 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-адрес в новой вкладке каждый, следовательно, открывая несколько вкладок.
Решение. Перед подключением обработчика проверьте, подключен ли обработчик, чтобы был подключен только один обработчик.
Надеюсь это поможет