Прерывание скрипта, вызванного в другом скрипте в tkinter - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть программа (скажем, p1.py), которая вызывает другой скрипт python (скажем, p2.py) по нажатию кнопки. Я хотел бы иметь кнопку, которая останавливает выполнение p2.py, но все кнопки замирают, когда он работает.

Единственный способ остановить это - использовать прерывание клавиатуры в консоли. Я читал о функции after (), но должен ли я реализовать ее в p1 или p2? Или есть другой способ сделать это без функции after ()?

import tkinter
import os

window = tkinter.Tk()
window.title("Detecting")

def clicked():
    os.system('python extract_frames.py')

bt = tkinter.Button(window,text="Start",command=clicked)
bt.pack()

stop = tkinter.Button(window,text="Stop",command="break")     #also what command should I use for the interrupt?
stop.pack()

window.geometry('400x400')
window.mainloop()

1 Ответ

0 голосов
/ 18 февраля 2020

Вы должны использовать subprocess.Popen() вместо os.system():

import tkinter
import subprocess

proc = None

def clicked():
    global proc
    proc = subprocess.Popen(['python', 'extract_frames.py'])

def kill_task():
    if proc and proc.poll() is None:
        print('killing process ...')
        proc.kill()

window = tkinter.Tk()
window.geometry('400x400')
window.title("Detecting")

bt = tkinter.Button(window, text="Start", command=clicked)
bt.pack()

stop = tkinter.Button(window, text="Stop", command=kill_task)
stop.pack()

window.mainloop()
...