编写了一个简单的答题器程序,当我运行它时,数字反复闪烁

时间:2019-01-03 01:07:23

标签: python turtle-graphics

我刚刚使用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()

感谢大家的帮助。

2 个答案:

答案 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(),除非您完全了解它的作用并且已经有需要优化的工作代码。