Python TypeError:列表索引必须是整数,而不是Tkinter中的浮点变量
我是编程新手,所以如果我的问题是显而易见的,请原谅我。 本质上,我试图创建一个基本的极坐标系,用于Tkinter,但是,我有一些问题 以下是相关的代码位:Python TypeError:列表索引必须是整数,而不是Tkinter中的浮点变量,python,tkinter,integer,Python,Tkinter,Integer,我是编程新手,所以如果我的问题是显而易见的,请原谅我。 本质上,我试图创建一个基本的极坐标系,用于Tkinter,但是,我有一些问题 以下是相关的代码位: def polar(self, theta, radius, xC, yC): thetarad = -theta * (math.pi / 180) xprime = xC + math.cos(thetarad) * radius yprime = yC + math.sin(thetarad) * radius
def polar(self, theta, radius, xC, yC):
thetarad = -theta * (math.pi / 180)
xprime = xC + math.cos(thetarad) * radius
yprime = yC + math.sin(thetarad) * radius
return (xprime, yprime)
def draw(self, c):
# create X-coordinate guide list
xspaces = 55 # number of guides in the guide list
xgridwidth = 1.0 * self.width / xspaces
x = []
for i in range(xspaces+1):
x.append(self.left + i*xgridwidth)
# create Y-coordinate guide list
yspaces = 100 # number of guides in the guide list
ygridwidth = 1.0 * self.height / yspaces
y = []
for i in range(yspaces+1):
y.append(self.top + i*ygridwidth)
xC = x[30]
yC = y[25]
theta = 0
radius = 15
[xprime, yprime]=self.polar(theta, radius, xC, yC)
petalp1 = ( (x[xprime], y[yprime]) )
最上面和最下面的部分是我得到的错误。本质上,我只需要xprime和yprime作为整数返回,这样在建立p1时,它们可以和原始数一样使用。谢谢你的帮助
完全错误:
Traceback (most recent call last):
File "E:FileName.py", line 34, in <module>
daisy.draw(c)
File "E:FileName2.py", line 174, in draw
petalp1 = (x[int(xprime)], y[int(yprime)])
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“E:FileName.py”,第34行,在
黛西,画(c)
文件“E:FileName2.py”,第174行,在绘图中
petalp1=(x[int(xprime)],y[int(yprime)])
索引器:列表索引超出范围
似乎int(xprime)
比xspaces
(值:55)大,int(yprime)
比yspaces
(值:100)大,所以您尝试获取列表x
(长度:55)和列表y
(长度:100)(x[int(xprime)]
和y[int(yprime>)你看到的问题是什么?在最后一行,如果我有“p1=((xprime,yprime)),那就没有问题,但我需要它的形式是“p1=((x[xprime],y[yprime])”。出于某种原因,我无法让xprime或yprime充当Tkinter所需的整数。为什么需要额外的括号((x[xprime],y[yprime])
?你不能只做(x[xprime],y[yprime])
?你确定上面这行不是你的意思(注意方括号到圆括号的变化):(xprime,yprime)=self.polar(θ,radius,xC,yC)
完全编辑了注释:方括号到圆括号似乎没有什么区别。同样的错误。更改值似乎没有什么区别。弹出相同的“索引超出范围”错误。不过,请欣赏这个想法。列表索引超出范围
表示int(xprime)
和/或int(yprime)
在x[int(xprime)]中太大
和/或y[int(yprime)]
。或者列表x[]
和/或y[]
的大小太小。我试着运行你的代码(使用width=800,height=600,left=0,top=0
),我得到int(xprime)==451
和int(yprime)==150
,所以x[451]
和y[150]
不在列表中。对于width=55
和height=100
我得到int(xprime)==45
和int(yprime)==15,所以x[45]
和y[15]
在列表中。我不知道你的宽度
和高度
。