Python TypeError报错求助:Button() takes no arguments
错误信息
"C:\Users\Max Breier\AppData\Local\Programs\Python\Python310\python.exe" "C:\Users\Max Breier\PycharmProjects\pythonProject\JaR\master.py" pygame 2.1.2 (SDL 2.0.18, Python 3.10.2) Hello from the pygame community. https://www.pygame.org/contribute.html Traceback (most recent call last): File "C:\Users\Max Breier\PycharmProjects\pythonProject\JaR\master.py", line 35, in <module> resume_button = button.Button(304, 125, resume_img, 1) TypeError: Button() takes no arguments Process finished with exit code 1
创建Button实例的代码
resume_button = button.Button(304, 125, resume_img, 1) options_button = button.Button(297, 250, options_img, 1) quit_button = button.Button(336, 375, quit_img, 1) video_button = button.Button(226, 75, video_img, 1) audio_button = button.Button(225, 200, audio_img, 1) keys_button = button.Button(246, 325, keys_img, 1) back_button = button.Button(332, 450, back_img, 1)
Button类的原始代码
class Button(): def _init_(self, x, y, image, scale): width = image.get_width() height = image.get_height() self.image = pygame.transform.scale(image, (int(width * scale), int(height * scale))) self.rect = self.image.get_rect() self.rect.topleft = (x, y) self.clicked = False def draw(self, surface): action = False pos = pygame.mouse.get_pos() if self.rect.collidepoint(pos): if pygame.mouse.get_pressed()[0] == 1 and self.clicked == False: self.clicked = True action = True if pygame.mouse.get_pressed()[0] == 0: self.clicked = False surface.blit(self.image, (self.rect.x, self.rect.y)) return action
解决方案
问题出在Button类的构造函数定义上:Python要求类的构造函数必须以双下划线开头和结尾,即__init__,而你写的是_init_(单下划线),这会让Python无法识别这是构造函数,转而使用默认的无参构造函数,导致传参时报错。
只需要把构造函数的名字改成__init__即可,修改后的代码如下:
class Button(): def __init__(self, x, y, image, scale): width = image.get_width() height = image.get_height() self.image = pygame.transform.scale(image, (int(width * scale), int(height * scale))) self.rect = self.image.get_rect() self.rect.topleft = (x, y) self.clicked = False def draw(self, surface): action = False pos = pygame.mouse.get_pos() if self.rect.collidepoint(pos): if pygame.mouse.get_pressed()[0] == 1 and self.clicked == False: self.clicked = True action = True if pygame.mouse.get_pressed()[0] == 0: self.clicked = False surface.blit(self.image, (self.rect.x, self.rect.y)) return action
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

