Python turtle库Screen未定义错误求助(Python3.12.1)
问题排查与修复方案
错误原因
- 模块成员未限定访问:仅通过
import turtle导入模块,但代码中直接使用Screen()、Turtle()调用类,Python 3.12.1对模块访问的检查更严格,导致NameError。 - 冗余的窗口初始化:代码开头已通过
turtle.Screen()创建了screen对象,末尾又重复调用Screen(),属于无效重复操作。
修复后的代码
import turtle import time import random #from PIL import Image screen = turtle.Screen() screen.bgcolor("light blue") screen.setup(1.0, 1.0) screen.title("flapy bird") canvas = screen.getcanvas() root = screen._root CURSOR_SIZE = 20 SQUARE_SIZE = 50 FONT_SIZE = 40 FONT = ('Arial', FONT_SIZE, 'bold') class game_test: def __init__(self): self.board_sprites = [[""] * 3 for i in range(3)] self.board = [[""] * 3 for i in range(3)] # sets up the tile system for j in range(3): for i in range(3): # 修改:通过turtle模块限定访问Turtle类 box = turtle.Turtle('square', visible=False) box.speed(0) box.shapesize(SQUARE_SIZE / CURSOR_SIZE) box.penup() box.goto(i * (SQUARE_SIZE) - (SQUARE_SIZE), j * (SQUARE_SIZE) - (SQUARE_SIZE)) box.showturtle() box.stamp() # blank out background behind turtle (for later) self.board_sprites[j][i] = box box.onclick(lambda x, y, box=box, i=i, j=j: self.mouse(box, i, j)) def mouse(self, box, i, j): x, y = i, j #box.hideturtle() box.color("blue") print(self.board) # 移除重复的Screen()初始化,直接使用已创建的screen对象 game = game_test() screen.mainloop()
关键修改说明
- 类内的
Turtle()调用改为turtle.Turtle(),确保通过模块路径访问类成员。 - 删除末尾冗余的
screen = Screen(),避免重复创建窗口实例。 - (可选优化)若想简化代码,可在开头添加
from turtle import Turtle, Screen,之后直接使用Turtle()和Screen()即可,但需注意避免命名冲突。
内容的提问来源于stack exchange,提问作者Charles250211
相关产品推荐
相关产品推荐

