You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 07:21:03