Черепаха в Ткинтере создает несколько окон - PullRequest
0 голосов
/ 22 сентября 2018

Я пытаюсь создать быстрый показ черепах с помощью Tkinter, но происходят некоторые странные вещи.

Первые два окна создаются (одно пустое, одно с черепахами), во-вторых, любая попыткавыключить трассировщик не работает.

Возможно, это простое исправление, но в данный момент я не могу его найти.

Любая помощь будет принята,

Нижекод:

import tkinter as tk
import turtle

window = tk.Tk()
window.title('Top 10\'s')

def loadingscreen():

    canvas = tk.Canvas(master = window, width = 500, height = 500)
    canvas.pack()

    arc1 = turtle.RawTurtle(canvas)
    arc2 = turtle.RawTurtle(canvas)


    #clean up the turtles and release the window
    def cleanup():
        turtle.tracer(True)
        arc1.ht()
        arc2.ht()
        turtle.done()

    #animate the turtles
    def moveTurtles(rangevar,radius,extent,decrease):
        for distance in range(rangevar):
           arc1.circle(-radius,extent = extent)
           arc2.circle(-radius,extent = extent)
           radius -= decrease

    #Set the turtle
    def setTurtle(turt,x,y,heading,pensize,color):
       turt.pu()
       turt.goto(x,y)
       turt.pd()
       turt.seth(heading)
       turt.pensize(pensize)
       turt.pencolor(color)

    #draw on the canvas
    def draw():
        #set variables
        rangevar = 200
        radius = 200
        decrease = 1
        extent = 2

        #setup and draw the outline
        turtle.tracer(False)
        setTurtle(arc1,0,200,0,40,'grey')
        setTurtle(arc2,14,-165,180,40,'grey')
        moveTurtles(rangevar,radius,extent,decrease)

        #setup and animate the logo 
        turtle.tracer(True)
        setTurtle(arc1,0,200,0,20,'black')
        setTurtle(arc2,14,-165,180,20,'black')
        moveTurtles(rangevar,radius,extent,decrease)

    #main program
    def main():
        turtle.tracer(False)
        arc1.speed(0)
        arc2.speed(0)
        draw()
        cleanup()

    if __name__ == "__main__":
        try:
            main()
        except:
            print("An error occurred!!")



loadingscreen()

По сути, я создаю окно Tk, затем холст, затем две черепахи, а затем анимирую этих черепах

1 Ответ

0 голосов
/ 22 сентября 2018

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

import tkinter as tk
from turtle import RawTurtle, TurtleScreen

def cleanup():
    """ hide the turtles """

    arc1.hideturtle()
    arc2.hideturtle()

def moveTurtles(rangevar, radius, extent, decrease):
    """ animate the turtles """

    for _ in range(rangevar):
        arc1.circle(-radius, extent=extent)
        arc2.circle(-radius, extent=extent)
        radius -= decrease

def setTurtle(turtle, x, y, heading, pensize, color):
    turtle.penup()
    turtle.goto(x, y)
    turtle.pendown()

    turtle.setheading(heading)
    turtle.pensize(pensize)
    turtle.pencolor(color)

def draw():
    # set variables
    rangevar = 200
    radius = 200
    decrease = 1
    extent = 2

    screen.tracer(False)  # turn off animation while drawing outline

    # setup and draw the outline
    setTurtle(arc1, 0, 200, 0, 40, 'grey')
    setTurtle(arc2, 14, -165, 180, 40, 'grey')
    moveTurtles(rangevar, radius, extent, decrease)

    screen.tracer(True)  # turn animation back on for the following

    # setup and animate the logo
    setTurtle(arc1, 0, 200, 0, 20, 'black')
    setTurtle(arc2, 14, -165, 180, 20, 'black')
    moveTurtles(rangevar, radius, extent, decrease)

# main program

window = tk.Tk()
window.title("Top 10's")

canvas = tk.Canvas(master=window, width=500, height=500)
canvas.pack()

screen = TurtleScreen(canvas)

arc1 = RawTurtle(screen)
arc1.speed('fastest')

arc2 = RawTurtle(screen)
arc2.speed('fastest')

draw()
cleanup()

Другойсовет: не связывайтесь с tracer() до тех пор, пока все остальное не сработает, а затем (пере) внимательно прочитайте его документацию.

...