Задать вопрос

Что делать когда turtle в python не отвечает?

вот мой код:
код

from tkinter import *
from tkinter.messagebox import *
from tkinter import filedialog as fd
from tkinter import *
from tkinter import messagebox as mb
import tkinter as tk
from tkinter.filedialog import askopenfilename
from tkinter import filedialog as fd
import tkinter.simpledialog
from tkinter import colorchooser
from PIL import ImageGrab
import keyboard
import turtle as red
import time
import ctypes
myappid = 'mycompany.myproduct.subproduct.version'
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
root = Tk()
root.resizable(0, 0)
root.iconbitmap(r"C:\\turtle.ico")
global окно_управления
окно_управления = Toplevel(root)
окно_управления.iconbitmap(r"C:\\turtle.ico")
root.title("черепаха-гра")
canvas = Canvas(root, width=500, height=500)
canvas.grid()
turtle = red.RawTurtle(canvas)
turtle.shape("turtle")
global size
size = 5
turtle.pensize(5)
turtle.color("#307826")
canvas.configure(background="#91b6ed")
turtle.speed(6)
global цвета
global цвет
цвета = ["#4a2626", "blue", "red", "#307826"]
цвет = 3
def left():
    if keyboard.is_pressed('left'):
        print("left")
        turtle.left(45)
def forward():
    if keyboard.is_pressed('up'):
        print("up")
        turtle.forward(20)
def right():
    if keyboard.is_pressed('right'):
        print("right")
        turtle.right(45)
def color():
    if keyboard.is_pressed('space'):
        print("новий колір!")
        новий_колір()
def reset():
    if keyboard.is_pressed('1'):
        print("ну, добре почистимо полотно...")
        turtle.reset()
        turtle.shape("turtle")
        turtle.pensize(5)
        turtle.color("#307826")
        canvas.configure(background="#91b6ed")
        turtle.speed(6)
def новий_колір():
    global цвета
    global цвет
    if цвет == 3:
        цвет = 0
    else:
        цвет += 1
    turtle.color(цвета[цвет])
def розмір_плюс():
    global size
    if keyboard.is_pressed('2'):
        size += 1
        print("більший розмір! тепер він дорівняє %s" %(size))
        turtle.pensize(size)
    time.sleep(0.1)
def розмір_мінус():
    global size
    if keyboard.is_pressed('3'):
        size -= 1
        print("менший розмір! тепер він дорівняє %s" %(size))
        turtle.pensize(size)
    time.sleep(0.1)
while True:
    right()
    forward()
    left()
    color()
    reset()
    розмір_плюс()
    розмір_мінус()


запускаешь, играешь немного и показывает вот такое:
6046630500c1d378453410.gif
как это исправить?
  • Вопрос задан
  • 753 просмотра
Подписаться 2 Простой 6 комментариев
Решения вопроса 1
@o5a
Не нужно было использовать модуль keyboard вместе с tkinter. Он перехватывает управление, из-за чего программа "не отвечает".

Вместо использования модуля keyboard в каждой функции, глобального цикла while True надо было использовать метод bind. Пример для команды right (аналогично сделать привязку остальных клавиш):
# выкидываем проверку клавиши, оставляем только само действие
def right(event):
    print('right')
    turtle.right(45)

# затем назначаем стрелке вправо нашу функцию
root.bind('<Right>', right)

# полностью убираем весь цикл while True, вместо него используем
root.mainloop()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы