我刚刚使用turtle模块在python中编写了一个简单的clicker计数器。当我运行它时,数字只是一遍又一遍地闪烁,否则就可以正常工作。
我已经尝试过使用.tracer()和.update()以及尝试使用.mainloop()了。我相信问题出在我使用.clear()的过程中,但是我不知道如何解决这个问题。
import turtle
num = 0
def counting(x, y):
global num
num += 1
wn = turtle.Screen()
wn.bgcolor("black")
wn.title("Clicker")
wn.screensize(600, 600)
wn.setup(650, 650, starty=15)
wn.tracer(10)
count = turtle.Turtle()
count.hideturtle()
count.color("white")
count.speed(0)
wn.onscreenclick(counting)
while True:
wn.update()
count.write(num, False, align="center", font=("Arial", 100, "bold"))
count.clear()
感谢大家的帮助。
答案 0 :(得分:2)
对于类似的项目,我在循环中添加了一个条件,以仅在值更改时更新。
while True:
old_num = num
wn.update()
if (old_num != num):
count.write(num, False, align="center", font=("Arial", 100, "bold"))
count.clear()
答案 1 :(得分:1)
这比您要做的要容易。对于这种文本更新应用程序,我建议使用clear()
而不是undo()
(例如,游戏中的得分,计时器等)。将专用的乌龟移到文本所在的位置,并写一个首字母(零)值,并在需要新值时将undo()
和write()
组合在一起:
from turtle import Screen, Turtle
FONT = ('Arial', 100, 'bold')
num = 0
def counting(x, y):
global num
num += 1
count.undo() # undo previous write()
count.write(num, align="center", font=FONT)
wn = Screen()
wn.bgcolor('black')
wn.title("Clicker")
wn.setup(650, 650, starty=15)
count = Turtle(visible=False)
count.color("white")
count.write(num, align="center", font=FONT)
wn.onscreenclick(counting)
wn.mainloop()
(在Python 3中添加了turtle undo 功能。)基于事件的环境(例如turtle)绝对不能控制while True:
-可能会阻止所需的事件。您应该设置所有事件处理程序,并通过mainloop()
或其变体之一将控制权移交给主事件循环。另外,请避免使用tracer()
,除非您完全了解它的作用并且已经有需要优化的工作代码。