I'm trying to make a game in python 3.5 using the canvas. I have a list of the coordinates of the triangle in a list. I'm using a class to make an object which is suppose to be the player. When I tried to implement a movement system I thought of using a list so that I can quickly change the coordinates using a for loop, however when I run the code and press the button it gives me this:
"TypeError: list indices must be integers or slices, not float"
Here's the code (sorry if it's primitive, it's my first time using both canvas and class and I typed this up in three hours)
import sys
from tkinter import*
w = 600
h = 400
gui = Tk()
gui.geometry('1000x650')
canvas = Canvas(gui,width=w,height=h,bg='black')
canvas.place(relx=0.5,rely=0.35,anchor=CENTER)
class player():
    def __init__(self,x,y,a):
        self.x1 = x
        self.y1 = y
        self.x2 = x-a/2
        self.y2 = y+a
        self.x3 = x+a/2
        self.y3 = y+a
        self.coords = [self.x1,self.y1,self.x2,self.y2,self.x3,self.y3]
    def display(self):
        canvas.create_polygon(self.x1,self.y1,self.x2,self.y2,self.x3,self.y3,outline='white')
    def move(self,pos):
        if pos == True:
            thrust = 5
        else:
            thrust = -5
        while thrust > 0.1:
            for i in self.coords:
                self.coords[i]=self.coords[i]+thrust
            thrust-=1
up_arrow = Button(gui,text='^',command=lambda:p1.move(True))
up_arrow.place(relx=0.5,rely=0.7,anchor=CENTER)
p1 = player(w/2,h/2,50)
p1.display()
				
                        
for i in self.coords:this is going to set
ito each item inself.coordsin turn, not the indices of the items.That means that when you wrote
self.coords[i]=self.coords[i]+thrustwas likely not what you wanted. (Sinceiis not an index, but an item inself.coords)You will have to use the
range()function to giveithe value you want.You might think that this would work
but it does not work because
iis the value at that position inself.coords. It is not a reference to it. Changing it will not changeself.coords. It is temporary.