我编写了一个图像检测程序,该程序可以截取屏幕截图并检测特定图像,进行计算并在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()
答案 0 :(得分:1)
菜鸟错误。 self.after(self.callback_time, self.take_screen_shot())
应该是self.after(self.callback_time, self.take_screen_shot)
,并且不要加上括号。