我已经编写了以下代码作为屏幕保护程序,有点粗糙,但这只是一个开始。我可以全屏显示,但我遇到的问题是,当我关闭应用程序时,我会出现乌龟终止符错误。关键是在这个过程中的任何时候都要杀死应用程序,而不会引发错误。有点像90年代的旧3d管道屏幕保护程序。我已经将其转换为".scr"文件,但我只能单击x或alt-f4终止,它会弹出错误消息。有人能帮忙吗?我觉得我就在那里。
import turtle as t
from turtle import Screen
import random
tim = t.Turtle()
tim.ht()
t.colormode(255)
tim.speed(6)
screen = Screen()
screenTk = screen.getcanvas().winfo_toplevel()
screenTk.attributes('-fullscreen', True)
color_list = [(54, 108, 149), (225, 201, 108), (134, 85, 58), (224, 141, 62),
(197, 144, 171), (143, 180, 206), (137, 82, 106), (210, 90, 68), (188, 78, 122),
(69, 101, 86), (132, 183, 132), (65, 156, 86), (137, 132, 74), (48, 155, 195), (183, 191, 202),
(58, 47, 41), (47, 59, 96), (38, 44, 64), (106, 46, 54), (41, 55, 48), (12, 104, 95),
(118, 125, 145), (182, 194, 199), (54, 45, 52)]
running = True
while running:
tim.pu()
tim.setpos(-825, -450)
for i in range(7):
for _ in range(12):
tim.dot(100, random.choice(color_list))
tim.fd(150)
y = ((i + 1) * 150) – 450
tim.setpos(-825, y)
tim.clear()
screen.exitonclick()
您的直接问题似乎是这行:
y = ((i + 1) * 150) – 450
减号不是正确的字符,它看起来有点像Unicode,而不是真正的-
符号。但还有一个更大的问题:
如果这个问题得到纠正,并且程序运行了,你就会把自己锁在电脑之外。screen.exitonclick()
永远无法到达,因此您无法点击退出。即使到达,您仍然会被锁定,因为在您不断绘制时,单击事件没有机会到达事件处理程序。
事实证明,这是一个比我最初猜测的更棘手的问题。我已经对您的代码进行了彻底的返工,将其翻过来,这样事件处理程序就可以为的每个点循环。这样,当你点击窗口时,它会立即退出并消失。(我定义了自己的exitonclick()
功能,通过无情来避免错误消息。(
import sys
from turtle import Screen, Turtle
from random import choice
color_list = [
(54, 108, 149), (225, 201, 108), (134, 85, 58), (224, 141, 62),
(197, 144, 171), (143, 180, 206), (137, 82, 106), (210, 90, 68),
(188, 78, 122), (69, 101, 86), (132, 183, 132), (65, 156, 86),
(137, 132, 74), (48, 155, 195), (183, 191, 202), (58, 47, 41),
(47, 59, 96), (38, 44, 64), (106, 46, 54), (41, 55, 48),
(12, 104, 95), (118, 125, 145), (182, 194, 199), (54, 45, 52)
]
def draw_column(row=0, column=11):
turtle.dot(100, choice(color_list))
turtle.forward(150)
if column > 0:
screen.ontimer(lambda: draw_column(row, column - 1))
else:
screen.ontimer(lambda: draw_row(row + 1))
def draw_row(row=7):
if row == 7:
turtle.clear()
turtle.setpos(-825, -450)
screen.ontimer(draw_column)
else:
y = (row * 150) - 450
turtle.setposition(-825, y)
screen.ontimer(lambda: draw_column(row))
turtle = Turtle()
turtle.hideturtle()
turtle.penup()
screen = Screen()
screen.colormode(255)
window = screen.getcanvas().winfo_toplevel()
window.attributes('-fullscreen', True)
draw_row()
def exitHeartlessly(x, y):
sys.exit(0)
screen.onclick(exitHeartlessly)
screen.mainloop()
理论上,screen.setup(width=1.0, height=1.0)
应该会给你与attributes('-fullscreen', True)
相同的结果,但在实践中,找到解决方案并不那么好。