Я пытаюсь написать программу с графическим интерфейсом, получающую определенное содержимое с веб-страницы. Идея в том, что когда я нажимаю кнопку «Пуск», программа должна начать извлекать информацию с этой страницы. И я хочу добавить код, чтобы проверить, подключен ли к Интернету. Если нет, продолжайте попытки, пока не подключитесь.
Поэтому я просто добавил в событие следующий код, но обнаружил, что он не работает. Также необходимо принудительно закрыть всю программу. Вот мой код:
import urllib2
import time
InternetNotOn = True
while InternetNotOn:
try:
urllib2.urlopen("http://google.com")
InternetNotOn = False
print "Everyting is fine!"
except urllib2.URLError, e:
print "Error!"
time.sleep(10)
В чем может быть проблема?
2 ответа
Когда у вас есть программа, основанная на событиях, общий поток программы таков:
while the-program-is-running:
wait-for-an-event
service-the-event
exit
Теперь давайте посмотрим, что происходит, когда сервис-событие вызывает что-то с (потенциально) бесконечным циклом:
while the-program-is-running:
wait-for-an-event
while the-internet-is-on:
do-something
exit
Ты видишь проблему? В худшем случае ваша программа может никогда больше не вызвать wait-for-an-event, потому что ваш цикл запущен.
Помните: цикл событий уже является бесконечным, вам не нужно добавлять внутри него еще один бесконечный цикл. Вместо этого воспользуйтесь преимуществами существующего цикла. Вы можете использовать wx.CallAfter или wx.CallLater для вызова метода, который вызовет вашу функцию в следующая итерация цикла событий.
Затем в своей функции вы вызываете wx.CallAfter или < a href = "http://www.wxpython.org/docs/api/wx.CallLater-class.html" rel = "nofollow noreferrer"> wx.CallLater еще раз, чтобы вызвать его снова на следующая итерация цикла событий.
Вместо time.sleep(10)
вы можете вызвать wxApp :: Yield и { {X1}} десять раз.
Остерегайтесь проблем с повторным входом (например, повторного нажатия кнопки запуска). Кнопка запуска может быть недоступна в обработчике событий.
Но решение Брайана Окли, вероятно, лучший способ.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.