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

如何获取Tkinter对象位置?调用winfo_x()时触发AttributeError

Tkinter获取对象位置报错解决

问题代码

def fireBullet(event):
        global playerMovementSpeed, player

        playerX = player.winfo_x()
        playerY = player.winfo_y()

        bullet.setx(playerX)
        bullet.sety(playerY)

        for i in range(40):
            c.move(bullet, 0, bulletMovementSpeed)

        return player

报错信息

属性错误:‘int’对象没有属性‘x’(原英文:AttributeError: 'int' object has no attribute 'x')

问题原因

调用player.winfo_x()时,player是整数类型而非Tkinter组件对象。通常这种情况是因为player是Canvas创建图形项(比如create_rectangle、create_image)时返回的整数ID,这类ID没有winfo_x()方法——该方法仅适用于Label、Frame这类窗口组件。

解决方案

如果player是Canvas上的图形项,改用Canvas的coords()方法获取位置:

def fireBullet(event):
        global playerMovementSpeed, player

        # 获取player图形项的坐标列表,格式为[x1, y1, x2, y2]
        player_coords = c.coords(player)
        playerX = player_coords[0]
        playerY = player_coords[1]

        # 若bullet是Canvas图形项,建议用coords方法设置位置,而非setx/sety
        c.coords(bullet, playerX, playerY, playerX + bullet_width, playerY + bullet_height)

        for i in range(40):
            c.move(bullet, 0, bulletMovementSpeed)

        return player

注:如果bullet也是Canvas图形项,setx()/sety()并非标准方法,需替换为Canvas的coords()方法来设置位置,根据子弹的尺寸调整坐标参数即可。

内容的提问来源于stack exchange,提问作者user22736297

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:03:14