2016-03-29 5 views
0

Я создал этот класс:недопустимый цвет аргумент 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() 

Когда я пытаюсь использовать его в

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

Я получаю эту ошибку:

TypeError: invalid color argument 

Что здесь не так ?

+0

Передайте кортеж color.return_color() как параметр, а не объект. – formatkaka

ответ

3

PyGame ничего не знает о вашем пользовательском цветовом классе; в частности, он ожидает кортеж чисел, указывающих цвет, и он не знает, что ему нужно вызвать метод return_color вашего объекта, чтобы получить такой кортеж. Вы должны назвать это самим.

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

Спасибо. Мне нужно узнать много чего ... – DaCR

0

Другой вариант заключается в использовании Len и GetItem крюки в своем классе. Это то, что позволяет вам получить доступ к элементам в списке за кулисами. Так что-то подобное может работать:

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] 

Тогда

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

Таким образом Pygame может 'знать' о вашем randcolour как тип последовательности. Выезд: https://docs.python.org/2/reference/datamodel.html#emulating-container-types для получения дополнительной информации об эмуляционных контейнерах.

Примечание: Переход на память, но я уверен, что Pygame будет работать с Len и GetItem с цветом. Это определенно для таких вещей, как pygame.Rects.

Смежные вопросы