【发布时间】:2020-09-22 07:05:41
【问题描述】:
我对 python 比较陌生,我一直在尝试使用turtle 和 tkinter 库制作一个“软件”,其目标是绘制一个具有 n 边的多边形,其中 n 是标签中的条目输入。还有一个简单的按钮,基本上可以启动整个过程。我已经到了需要将 u 定义为角度的地步,而 u=360/n;但是我不断收到此错误:
invalid literal for int() with base 10: ''
或者
unsupported operand type(s) for /: 'int' and 'StringVar
我已经尝试将标签的输出转换为浮点或整数类型的信息,但我似乎不太明白。我应该如何继续转换条目的输出?非常感谢任何帮助,我希望任何阅读本文的人都能度过愉快的一天。 到目前为止的代码如下:
import turtle
import random
#################
canv=tkinter.Canvas(width=400,height=400)
canv.pack()
#################
tcanv=turtle.TurtleScreen(canv)
t=turtle.RawTurtle(tcanv)
n=tkinter.StringVar()
label=tkinter.Label(text="Sides?")
label.pack()
entry=tkinter.Entry(textvariable="n")
entry.pack()
u=(360/n) if n != 0 else 0
def draw():
for i in range (n):
t.fd(50)
t.left(u)
btn=tkinter.Button (text="Draw",fg="black",command=Draw)
btn.pack()
label.mainloop()
entry.mainloop()
btn.mainloop()
【问题讨论】:
-
它应该是一个变量,比如
textvariable=n,并且最初n是空的,这意味着它是'',所以你需要给它一些时间来输入。所以把它放在一个函数中或者稍微延迟一下,直到你输入输入 -
请问最简单的延迟方法是什么?我首先想到的是
time.sleep(),但是我似乎无法找到一种方法来实现它,因为我不知道我应该延迟多久,我不知道如何延迟某些事情直到发生你知道我的意思。 -
time.sleep()将冻结 GUI,使用after()方法