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

Python turtle获取屏幕宽高定位对象到半宽半高位置的方法

问题根因

报错核心是获取窗口宽高时没有执行函数调用:turtle.window_width和turtle.window_height是turtle内置的方法对象,直接赋值给变量时拿到的是函数本身,不是窗口实际的宽高数值,后续做除法运算时就会触发「无法对函数对象执行算术运算」的类型错误。
原有代码还存在3个隐性问题:

  • 在全局位置提前获取窗口宽高时,窗口还未完成初始化,拿到的是默认尺寸而非你通过setup配置的尺寸
  • 绘制边框的Turtle类没有加turtle.前缀,运行时会报名称未定义错误
  • 直接把载具放到(±width/2, height/2)位置会刚好卡在屏幕最外边缘,载具图形会超出可视区域
修正后可运行代码
import turtle

def tron():
    blueplayer = turtle.Turtle()
    redplayer = turtle.Turtle()
    screen = turtle.Screen()
    # 先初始化窗口尺寸
    screen.setup(720, 720)
    screen.bgpic('TronBg.png')
    screen.bgcolor('black')
    screen.addshape('BlueBike.gif')
    screen.addshape('RedBike.gif')
    
    # 窗口初始化完成后,加()调用方法拿到实际宽高整数值
    width = screen.window_width()
    height = screen.window_height()

    blueplayer.shape('BlueBike.gif')
    redplayer.shape('RedBike.gif')
    redplayer.pencolor("red")
    redplayer.pensize(3)
    blueplayer.pencolor("blue")
    blueplayer.pensize(3)
    redplayer.pu()
    blueplayer.pu()

    # 向内偏移20像素避免载具出界,不需要偏移可直接删除-20的计算
    blueplayer.goto(width/2 - 20, height/2 - 20)
    redplayer.goto(-width/2 + 20, height/2 - 20)

    redplayer.pd()
    blueplayer.pd()
    
    # 绘制紫色边框
    box = turtle.Turtle()
    box.ht()
    box.color('purple')
    box.speed('fastest')
    box.pensize(10)

    box.pu()
    box.setpos(-355, -345)
    box.pd()

    for i in range(4):
      box.forward(700)
      box.left(90)
    
    turtle.done()

tron()
关键修改说明
  • 把宽高获取逻辑移到screen.setup()执行之后,确保拿到的是当前窗口的实际配置尺寸
  • 给window_width、window_height补上()执行函数调用,拿到整数类型的像素值,从根源解决除法运算报错
  • 补全边框绘制部分缺失的turtle.前缀,同时把边框循环次数从5改为4,矩形边框仅需4次转向即可闭合
  • 初始位置默认增加20像素向内偏移,避免载具刚生成就处于屏幕外,如果需要严格匹配你要求的坐标,直接删除偏移计算即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:54:24