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

Python turtle库Screen未定义错误求助(Python3.12.1)

问题排查与修复方案

错误原因

  1. 模块成员未限定访问:仅通过import turtle导入模块,但代码中直接使用Screen()、Turtle()调用类,Python 3.12.1对模块访问的检查更严格,导致NameError。
  2. 冗余的窗口初始化:代码开头已通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.10 11:03:10