Mac系统Python获取Tkinter Canvas坐标替代win32gui方案求助
Mac系统Tkinter Canvas获取坐标替代win32gui的解决方案
错误原因
你调用self.canvas.coords(HWND)的用法完全错误:coords()方法仅支持传入画布上绘制元素(比如圆形、矩形)的ID,你传入winfo_id()返回的系统窗口句柄,只会得到空列表,因此触发解包错误。
可行方案
Tkinter自带跨平台的控件坐标获取方法,无需依赖Windows专属的win32gui,Mac、Linux、Windows全平台可用,直接替换你的classify_handwriting方法即可:
def classify_handwriting(self): # 先刷新画布确保渲染完成,避免获取到的宽高为0 self.canvas.update() # 获取画布左上角相对于屏幕的坐标 x = self.canvas.winfo_rootx() y = self.canvas.winfo_rooty() # 获取画布的实际宽高 w = self.canvas.winfo_width() h = self.canvas.winfo_height() # 按原有逻辑保留4像素边距,组装截图区域(左、上、右、下) rect = (x + 4, y + 4, x + w - 4, y + h - 4) im = ImageGrab.grab(rect) digit, acc = predict_digit(im) self.label.configure(text= f"{digit}, {int(acc*100)}%")
注意事项
如果运行后触发权限相关报错无法截图,需要在Mac的「系统设置>隐私与安全性>屏幕录制」中,给你运行代码的终端或者IDE(比如VSCode、PyCharm)开启屏幕录制权限,重启对应程序后即可正常运行。
内容的提问来源于stack exchange,提问作者AbAc
相关产品推荐
相关产品推荐

