无法用正方形填充 Python tkinter/turtle window

Trouble filling a Python tkinter/turtle window with squares

我无法让 turtle.begin_fill() / turtle.end_fill() 命令在 tkinter window 中工作。我想让程序在 64x32 网格中将一堆彩色单元格绘制到屏幕上。这是设置 window 和绘制的全部代码,但是在设置 window:

之后它什么也没做
import turtle as tu
import tkinter as tk

axis = []
num = -512

for i in range(0,64):
    axis.append(num)
    num = num + 16

def drawworld(*args):
    for i in range(0,64):
        for j in range(0,32):
            tu.goto(axis[i],axis[j]+256)
            tu.pd()
            tu.color=("#ffff00")
            tu.begin_fill()
            for k in range(0,4):
                tu.fd(16)
                tu.lt(90)
            tu.end_fill()
            tu.pu()

root = tk.Tk()
root.title("game")
root.resizable(False, False)
canvas = tk.Canvas(master = root, width = 1024, height = 512)
canvas.grid(row=0, column=0, columnspan=10)
tu = tu.RawTurtle(canvas)
tu.speed(50)
tu.pu()
tu.ht()

drawworld()

root.mainloop()

但是,如果我要注释掉填充行,代码将完美运行(没有为框着色),这意味着一定有问题:

tu.color=("#ffff00")
tu.begin_fill()
for k in range(0,4):
    tu.fd(16)
    tu.lt(90)
tu.end_fill()
tu.pu()

我查阅了文档,这应该是完美的语法。我做错了什么?

我相信你的问题是这一行:

tu.color=("#ffff00")

这可能应该是:

tu.color("#ffff00")

要设置颜色,您不需要分配给海龟的颜色 属性,而是调用海龟的 .color() 方法。您的代码进行了此更改并进行了一些其他清理:

import tkinter as tk
from turtle import RawTurtle

axis = []
num = -512

for _ in range(64):
    axis.append(num)
    num += 16

def drawworld():
    for i in range(64):
        for j in range(32):
            tu.goto(axis[i], axis[j] + 256)
            tu.pendown()
            tu.color("#ffff00")
            tu.begin_fill()
            for _ in range(4):
                tu.forward(16)
                tu.left(90)
            tu.end_fill()
            tu.penup()

root = tk.Tk()
root.title("game")
root.resizable(False, False)

canvas = tk.Canvas(master=root, width=1024, height=512)
canvas.grid(row=0, column=0, columnspan=10)

tu = RawTurtle(canvas)
tu.speed('fastest')
tu.hideturtle()
tu.penup()

drawworld()

root.mainloop()

但是,这是一种非常缓慢的方法。有更快的方法,这里是使用冲压来加快过程的方法:

import tkinter as tk
from turtle import RawTurtle
from random import random

CUBE_SIZE = 16
CURSOR_SIZE = 20
WIDTH, HEIGHT = 1024, 512

axis = []
num = -HEIGHT

for _ in range(WIDTH // CUBE_SIZE):
    axis.append(num)
    num += CUBE_SIZE

def drawworld():
    for i in range(WIDTH // CUBE_SIZE):
        tu.goto(axis[i] + CUBE_SIZE // 2, axis[0] + HEIGHT // 2 + CUBE_SIZE // 2)

        for j in range(HEIGHT // CUBE_SIZE):
            tu.color(random(), random(), random())
            tu.stamp()
            tu.forward(CUBE_SIZE)

root = tk.Tk()
root.title("game")
root.resizable(False, False)

canvas = tk.Canvas(master=root, width=WIDTH, height=HEIGHT)
canvas.grid(row=0, column=0, columnspan=10)

tu = RawTurtle(canvas)
tu.shape('square')
tu.shapesize(CUBE_SIZE / CURSOR_SIZE)
tu.speed('fastest')
tu.hideturtle()
tu.setheading(90)
tu.penup()

drawworld()

root.mainloop()