Как у вас может произойти несколько вещей во время onscreenclick для python? (черепаха)

#python #python-turtle

Вопрос:

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

 def player_headto(x, y):
    player.left(player.towards(x, y) - player.heading())
    player.goto(x, y)
  window.onscreenclick(player_headto)
  def currency(x, y):
    c_amount = 0
    if x >= 100 and x <= 150:
      if y >= 50 and y <= 100:
        c_amount = c_amount   1
        print(str(c_amount))
      else:
        print(str(c_amount))
    else:
      print(str(c_amount))
  window.onscreenclick(currency)
 

Я не могу, чтобы при каждом щелчке одновременно происходило несколько вещей. Я перепробовал кучу, но он всегда либо возвращает ошибку, либо делает только одну.

Комментарии:

1. Попробуйте определить один метод handle_click (), который делает все, что вы хотите, когда происходит щелчок. Вместо привязки нескольких различных методов к onscreenclick

Ответ №1:

используйте многопоточность, что делает процессы многозадачными

Ответ №2:

Я не могу, чтобы при каждом щелчке одновременно происходило несколько вещей.

Вам не нужна резьба или ни один клик, который делает все. Что вам нужно, так это плохо документированный add аргумент в onscreenclick() пользу aka screen.onclick() . Вот простой пример:

 from turtle import Screen, Turtle

def draw_circle(x, y):
    turtle.circle(100)

def change_background(x, y):
    screen.bgcolor('red')

turtle = Turtle()

screen = Screen()

screen.onclick(change_background)
screen.onclick(draw_circle, add=True)

screen.mainloop()
 

Конечно, и то, и другое произойдет не сразу, а скорее последовательно. Это то, что вы получите с помощью одного клика, который делает все, или даже нарезает резьбу, поскольку все графические операции черепахи должны обрабатываться основным потоком.