Я нахожусь в Python37, на windows 10, работаю в tkinter, и я написал функцию did_file_update
, которая постоянно сканирует рабочий стол каждые 10 секунд, чтобы увидеть, изменился ли файл "test.txt". Также есть функция abort_window_call
, которая создает окно с красной кнопкой «ABORT». Я пытаюсь написать сценарий, который объединит две функции и позволит мне нажать кнопку «ABORT» и завершить выполнение сценария после нажатия кнопки «START» и вызова did_file_update
.
import os
import time
import threading
import tkinter as tk
from tkinter import messagebox
import tkinter.messagebox as msg
from tkinter import Button, Message, Tk
global path_to_watch
path_to_watch = "C:\\Users\\Desktop"
class App():
def __init__(self):
pass
def abort_window_call(self):
abort_window = Tk()
abort_window.title("Would you like to abort?")
abort_window.geometry('50x90+200+200')
abort_button = tk.Button(abort_window, text='ABORT', font=('century gothic', 24),
bg='red', fg='white', height=1, width=5,
relief='raised', command=lambda: abort_window.destroy())
abort_button.pack(padx=10, pady=5)
abort_window.mainloop()
def did_file_update(self):
statinfo_before = os.stat("C:\\Users\\Desktop\\test.txt")
statinfo_size_before = statinfo_before.st_size
while 1:
time.sleep (10)
statinfo_after = os.stat("C:\\Users\\Desktop\\test.txt")
statinfo_size_after = statinfo_after.st_size
if statinfo_size_after != statinfo_size_before:
print("Updated: test.txt")
statinfo_size_before = statinfo_size_after
break
else:
pass
def main(self):
master = Tk()
ws = master.winfo_screenwidth()
hs = master.winfo_screenheight()
x = (ws/2) - (180)
y = (hs/2) - (70)
master.title("File Update")
master.geometry('360x140+%d+%d' % (x, y))
msg = Message(master, text = "FILE UPDATE", width=700)
msg.config(font=('century gothic', 28))
msg.grid(row=3, column=0)
start_button = tk.Button(master, text='START', font=('century gothic', 24),
bg='green', fg='white', height=1, width=17,
relief='raised', command=self.did_file_update)
start_button.grid(row=1, column=0, sticky='n', padx=10, pady=5)
master.mainloop()
app=App()
t = threading.Thread(target = app.abort_window_call)
t1 = threading.Thread(target = app.main)
t.start()
t1.start()
tl; dr Как заставить функцию abort_window_call
завершить всю программу, даже после нажатия кнопки «START» и запуска функции did_file_update
?