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
相关产品推荐
相关产品推荐

