Написал простую кликерную программу, при ее запуске число мигает несколько раз - PullRequest
0 голосов
/ 03 января 2019

Я только что написал простой счетчик кликеров в python, используя модуль turtle.Когда я запускаю его, число просто мигает снова и снова, в противном случае оно работает нормально.

Я использовал .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 голосов
/ 03 января 2019

Это проще сделать, чем сделать.Вместо 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.)основанная среда, такая как черепаха, никогда не должна иметь while True: контроля - она ​​потенциально блокирует события, которые вы хотите.Вы должны настроить все свои обработчики событий и передать управление главному циклу событий с помощью mainloop() или одного из его вариантов.Кроме того, избегайте tracer(), если вы не полностью понимаете, что он делает, и у вас уже есть рабочий код, который требует оптимизации.

0 голосов
/ 03 января 2019

Для похожих проектов я добавил условие в цикл, чтобы оно обновлялось только при изменении значения.

 while True:
      old_num = num
      wn.update()
      if (old_num != num):
         count.write(num, False, align="center", font=("Arial", 100, "bold"))
         count.clear()
...