我创建了这个类:
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 :(得分:4)
PyGame对你的自定义颜色类一无所知;具体来说,它需要一个指定颜色的数字元组,并且它不知道它需要调用对象的return_color
方法来获得这样的元组。你需要自己打电话。
pygame.draw.rect(screen,colour.return_color(),[btnx,btny,btnwi,btnle])
答案 1 :(得分: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。