So, I tried to simplify my work and ended up making a mistake when I asked the first time. What I was trying to ask was why doesn't this line work?
Now the question is to specific and wont be of use to other people so I don't mind if you delete this post. Unfortunately i cant delete it.
from tkinter import Tk, Canvas, Frame, BOTH class Lsystem(Frame): def rule_1(self): #A0 self.r.append(1) self.r.append(0) A = self.lastCo B = self.lastCo C = self.lastCo+self.length D = self.lastCo+self.length self.canvas.create_line(A,B,C,D) def rule_2(self): #B1 self.r.append(1) def lindenL(self, num): x = 0 while x < num: for cycle in list(range(len(self.q))): if self.q == 1: self.rule_1() else: self.rule_2() self.q.pop(0) self.q = self.r #print (self.q) x += 1 return self.q def setVariables(self): self.r =  self.q =  self.line =  self.length = 100 self.maxCo = [800, 600] self.lastCo = [[400,600],[0,0]] #0 is A(0), 1 is B(1) def __init__(self, parent): Frame.__init__(self, parent) self.setVariables() self.parent = parent self.initUI() print(self.lindenL(2)) def initUI(self): self.parent.title("Shapes") self.pack(fill=BOTH, expand=1) self.canvas = Canvas(self) self.draw() self.canvas.pack() def draw(self): pass #self.canvas.create_line(self.calcCoA()) def main(): root = Tk() ex = Lsystem(root) root.geometry("800x600+300+300") root.mainloop() if __name__ == '__main__': main()