尝试获取用户输入并制作一个海龟点

Trying to take user input and make a turtle dot

在这种情况下尝试获取用户输入的数字,并让乌龟用我们从用户输入中获得的数字画一个点。这是我正在尝试做的一个学校项目,我试图找到他们真的没有帮助的 YouTube 视频。

from tkinter import *
import tkinter
import turtle

wn = turtle.Screen()
wn.bgcolor('black')

player = turtle.Turtle()
player.shape('turtle')
player.color('white')

def sad():
    player.dot(str(kj.get()))

top = tkinter.Tk()

top.geometry('600x600')

kj = Entry(top, bd =5)
kj.pack()

B = tkinter.Button(top, text ="Hello", command = sad)
B.pack()

wn.mainloop()
top.mainloop()

对于 turtle,您可以使用 setPos 命令告诉它去到一个位置。如果你只是将用户输入的值转换成坐标,告诉你乌龟去那里然后开始绘图。

这是一个解决方案:

import turtle
from time import sleep
from tkinter import *

#Setup
root=Tk()

wn = turtle.Screen()
wn.bgcolor('black')

player = turtle.Turtle()
player.shape('turtle')
player.color('white')

def goToLocation(coords):
    #Get user input and split it into two different coordinants (coordsx and coordsy)

    coordsx, coordsy = coords.split(" ")

    #Set turtles position to the coords specified

    player.hideturtle()
    player.penup()
    player.setpos(int(coordsx),int(coordsy))

    #Draw the circle of size
    player.pensize(50)
    player.showturtle()
    player.pendown()
    player.forward(1)

    sleep(5)


#Button clicked handler
def retrieve_input():
    inputValue=textBox.get("1.0","end-1c")
    print(inputValue)

    #Calls the previous function
    goToLocation(inputValue)


#Input box setup
textBox=Text(root, height=2, width=10)
textBox.pack()
buttonCommit=Button(root, height=1, width=10, text="Commit", 
                command=lambda: retrieve_input())
#command=lambda: retrieve_input() >>> just means do this when i press the button

buttonCommit.pack()

mainloop()

将Python turtle 与tkinter 结合使用时,需要使用embedded turtle 方法,而不是你使用的独立方法。由于 turtle 是在 tkinter 之上构建的,您实际上已经创建了两个根并且最终 运行 会遇到麻烦。 (例如,图像可能不适合您。)当您同时调用 top.mainloop()wn.mainloop()!

时,您显然对组合感到困惑

下面是如何在您的程序的 tkinter 中嵌入 turtle 的示例:

import tkinter as tk
from turtle import TurtleScreen, RawTurtle

def set_position():
    player.setposition(x_entry.get(), y_entry.get())
    player.dot(30, 'blue')
    player.home()

top = tk.Tk()

canvas = tk.Canvas(top, width=600, height=600)
canvas.pack()

screen = TurtleScreen(canvas)
screen.bgcolor('black')

player = RawTurtle(screen)
player.shape('turtle')
player.color('red', 'white')
player.penup()

x_entry = tk.DoubleVar()
tk.Label(top, text="X: ").pack(side=tk.LEFT)
tk.Entry(top, textvariable=x_entry).pack(side=tk.LEFT)

y_entry = tk.DoubleVar()
tk.Label(top, text="Y: ").pack(side=tk.LEFT)
tk.Entry(top, textvariable=y_entry).pack(side=tk.LEFT)

tk.Button(top, text="Draw Dot!", command=set_position).pack()

screen.mainloop()

我的建议是:首先,如果可以的话,尝试完全在 standalone turtle 中工作,除非确实需要,否则不要引入 tkinter;其次,不要相信任何在 tkinter 环境中尝试使用 standalone turtle 类 embedded 时犯同样错误的答案。