Как остановить выполнение функции при нажатии кнопки в Python 3? - PullRequest
0 голосов
/ 11 марта 2020

Я делаю маленькую аппликацию GUI с помощью кнопок tkinter, при нажатии кнопки 1 запускается функция с бесконечным l oop.

Я хотел бы иметь возможность остановить процесс с помощью другой кнопки и вернуть приложение в исходное состояние. Я не знаю, как это сделать, потому что когда button1 запускает скрипт, button2 блокируется. Я хочу остановить выполнение функции 1 по нажатию кнопки 2. Это мой код.

from tkinter import * 
root = Tk() 

def function1():
 x =0 
 while True :  # infinite loop
   print(x)
   x = x + 1  

def function2():
 sys.exit()

btn1 = Button(root, text ="Button 1", command = function1) 
btn1.place(x=200, y=200) 

btn2 = Button(root, text ="Button 2", command = function2) 
btn2.place(x= 300,y=300) 

root.geometry("400x400")
mainloop()

Спасибо.

1 Ответ

1 голос
/ 11 марта 2020

вы не можете запускать бесконечные l oop в кнопках, вместо этого вы можете использовать рекурсию. Вы можете вызвать функцию рекурсивно, и fuction1, function2 может быть функцией, используемой для управления любой переменной. Пожалуйста, go через следующий код:

from tkinter import *

running = False
x=0

def scanning():
    global x
    if running: 
        x = x+1
        print (x)
    # After 10 milli second, call scanning again (create a recursive loop)
    root.after(10, scanning)

def start():
    global running
    running = True

def stop():
    global running
    running = False

root = Tk()
root.title("Continuous Loop")
root.geometry("100x100")

app = Frame(root)
app.grid()

start = Button(app, text="Start counting", command=start)
stop = Button(app, text="Stop counting", command=stop)

start.grid()
stop.grid()

root.after(1000, scanning)  # After 1 second, call scanning
root.mainloop()

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...