2016-03-29 5 views
0

habe ich diese Klasse:ungültige Farb Argument für pygame

class randcolour: 
    def __init__(self): 
     self.r = random.randint(0,255) 
     self.g = random.randint(0,255) 
     self.b = random.randint(0,255) 
    def return_colour(self): 
     return (self.r, self.g, self.b) 
colour = randcolour() 
colour.return_colour() 

Wenn ich versuche, es zu benutzen, in

pygame.draw.rect(screen,colour,[btnx,btny,btnwi,btnle]) 

bekomme ich diesen Fehler:

TypeError: invalid color argument 

Was falsch ist hier ?

+0

Übergeben Sie das Tupel color.return_color() als Parameter und nicht als Objekt. – formatkaka

Antwort

3

PyGame weiß nichts über Ihre benutzerdefinierte Farbklasse; Insbesondere erwartet es ein Tupel von Zahlen, die die Farbe angeben, und es weiß nicht, dass es die return_color Methode Ihres Objekts aufrufen muss, um ein solches Tupel zu erhalten. Sie müssen es selbst anrufen.

pygame.draw.rect(screen,colour.return_color(),[btnx,btny,btnwi,btnle]) 
+0

Thanks.I müssen viele Dinge lernen ... – DaCR

0

Eine weitere Option ist len und getitem Haken in Ihrer Klasse zu verwenden. So können Sie auf die Elemente in einer Liste im Hintergrund zugreifen. So etwas wie dies funktionieren könnte:

class randcolour: 
    def __init__(self): 
     self.r = random.randint(0,255) 
     self.g = random.randint(0,255) 
     self.b = random.randint(0,255) 

     self.colour = [self.r, self.g, self.b] 

    def __len__(self): 
     return 3 #Hard coding three, could use len(self.colour) if you like 

    def __getitem__(self, key): 
     return self.colour[key] 

Dann

pygame.draw.rect(screen, colour, [btnx, btny, btnwi, btnle]) 

Auf diese Weise kann pygame 'wissen' über Ihre randcolour als Sequenztyp. Weitere Informationen zum Emulieren von Containern finden Sie unter https://docs.python.org/2/reference/datamodel.html#emulating-container-types.

Hinweis: Gehen durch Erinnerung hier, aber ich bin mir ziemlich sicher, dass pygame mit len arbeitet und getitem mit der Farbe. Es ist definitiv für Dinge wie pygame.Rects.