Я написал программу обнаружения изображений, которая делает снимок экрана и определяет конкретные изображения, выполняет расчеты и сообщает о них пользователю в окне Tkinter. Все работает отлично, за исключением того, что мне нужно, чтобы он продолжал работать до тех пор, пока пользователь не закроет программу, но я достигаю предела рекурсии (1000) и получаю ошибку RecursionError: maximum recursion depth exceeded
. Если я обработаю эту ошибку, она, конечно, в конечном итоге приведет к stack overflow error
.
Очевидно, что в моем подходе есть что-то принципиальное. Какими способами я мог бы делать бесконечные снимки экрана, обрабатывать вывод и отчитываться перед пользователем в окне Tkinter?
Мой урезанный подход ниже. Заранее благодарим за любые советы или идеи.
from PIL import ImageGrab
import tkinter as tk
class Main(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.screen_height = self.winfo_screenheight()
self.screen_width = self.winfo_screenwidth()
self.callback_time = 1 # Actual time is 1000
self.num_screenshots = 0
self.wm_attributes("-topmost", 1) # Keeps the Tkinter window above other windows
tk.Label(text="Number of Screenshots").pack(side="left")
self.counter_label = tk.Label()
self.counter_label.pack(side="left")
def process_screen(self):
# Do shape detection here
self.num_screenshots += 1
self.counter_label.configure(text=self.num_screenshots)
self.update_idletasks()
def take_screen_shot(self):
#self.screen_shot = ImageGrab.grab(bbox=(0, 0, self.screen_width, self.screen_height))
self.process_screen()
self.after(self.callback_time, self.take_screen_shot())
def run(self):
def callback(event):
if True:
self.after_cancel(self.process)
print("Call back Cancelled")
self.bind("<Return>", callback)
self.process = self.after(self.callback_time, self.take_screen_shot)
self.mainloop()
if __name__ == "__main__":
Main().run()