Когда вы запускаете долго выполняемый процесс - ваш цикл while - тогда mainloop не может работать и не может получать события мыши / клавиатуры из системы, отправляет события в виджеты, обновляет виджеты, перерисовывает окно.
Вы можете запустить doit
один раз - без while
- и затем использовать after(time, doit)
, чтобы запустить его через некоторое время. Таким образом, mainloop
успеет выполнить свою работу.
def doit():
time.clock()
if label_text.get() == "ON":
rgb = PIL.ImageGrab.grab().load()[1857,307]
print(rgb)
print(time.clock())
after(50, doit)
else:
print('module is turned OFF')
Или используйте window.update()
в while
, чтобы дать mainloop
время для обновления элементов.
def doit():
time.clock()
while label_text.get() == "ON":
rgb = PIL.ImageGrab.grab().load()[1857,307]
print(rgb)
print(time.clock())
window.update()
else:
print('module is turned OFF')
Если PIL.ImageGrab.grab()
работает дольше, возможно, вам придется запустить его в отдельном потоке.