Tkinter однопоточный.Это означает, что пока вы находитесь в цикле while
внутри startButtonClick
, никакие другие события не обрабатываются.Кнопка останова не будет вызывать свою команду до тех пор, пока не завершится функция startButtonClick
Вам необходимо помнить, что ваша программа уже выполняет глобальный бесконечный цикл: цикл обработки событий.Там нет причин, чтобы положить еще один бесконечный цикл внутри него.Когда вы хотите, чтобы что-то выполнялось вечно, хитрость заключается в том, чтобы поместить одну итерацию в цикл событий, а затем, когда она выполняется, она помещает другую итерацию в цикл событий.
Другой ключ к этому - убедиться, что одна итерация цикла быстрая - она должна быть намного меньше секунды (более похожа на 100 мс), иначе интерфейс станет медленным.
Логика выглядит примерно так:
def startButtonClick(self):
self.missionGO = 1
self._do_one_iteration()
def _do_one_iteration(self):
if self.missionGO == 1:
wlan = getAccessPoints()
x = numberOfAccessPoints(wlan)
print x
# this adds another iteration to the event loop
self.after(10, self._do_one_iteration)
def stopButtonClick(self):
self.missionGO = 0