Задать вопрос
@Kostayn_junior

Как обработать нажатие кнопки во время работы цикла?

У меня есть программа с двумя кнопками, написанная на tkinter (python). Одна из них запускает цикл, условием которого является флаг, а вторая меняет значение флага, по которому цикл должен прерываться. Но при запуске цикла и попытке нажать кнопку изменения флага программа перестаёт отвечать. Как это можно исправить не выделяя отдельный поток приложению?
Вот код моего приложения
from tkinter import *

root = Tk()
root.title('Test')
root.geometry('350x200')
root.resizable(width=False, height=False)
i = 1
check = 0
def btnInterrupt_click():
    global check
    check = 1
def test():
    while check == 0:
        global i
        i += 1
        print(check)
btnStart = Button(root, text='Start', fg='black', bg='white', width=8, command=test)
btnStart.pack()
btnInterrupt = Button(root, text='Прервать', fg='black', bg='white', width=8, command=btnInterrupt_click)
btnInterrupt.pack()

root.mainloop()

60bf4607804f0494310020.png
  • Вопрос задан
  • 277 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
Zoominger
@Zoominger Куратор тега Python
System Integrator
. Как это можно исправить не выделяя отдельный поток

Никак. У вас программа выполняется в одном GUI-потоке, поэтому и виснет.
Обычно программу делят на GUI и обработчики в разных потоках как раз для того, чтобы она не висла.
Ответ написан
Комментировать
danila763
@danila763
Учу python, sql
Писать асинхронный код
Ответ написан
Комментировать
@o5a
Не надо использовать свои циклы, чтобы не вызывать конфликт с циклом tkinter. Для запуска по времени есть root.after(время в мс, функция), через нее же можно и цикл сделать.
def something():
    if check != 0:
        # какие-то вычисления
        root.after(1000, something)

# для запуска самого цикла из основного кода программы
root.after(0, something)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
SpectrumData Екатеринбург
от 150 000 до 250 000 ₽
AST Москва
До 350 000 ₽
Wanted. Москва
До 250 000 ₽
14 янв. 2025, в 03:39
20000 руб./за проект
14 янв. 2025, в 03:33
3500 руб./за проект
14 янв. 2025, в 00:52
100 руб./за проект