正在导入 Class 'missing required positional arguments'?
Importing Class 'missing required positional arguments'?
我正在尝试创建 class = 按钮的实例。我知道我必须将 Button 初始化到我的 Menü class 中才能使用它的变量。但是 PyCharm 告诉我缺少 4 个必需的位置参数。
我是 Python/Pygame 的初学者,所以尽可能保持简单:)
import pygame
import os
import sys
pygame.init()
#Button Klasse:
class Button(): #Klasse mit Namen 'Button' erstellen
def __init__(self, x, y, image, scale): #init Methode definieren
width = image.get_width() #Imageweite herausfinden
height = image.get_height() #Imagehöhe herausfinden
self.image = pygame.transform.scale(image, (int(width * scale), (int(height * scale))))
self.rect = self.image.get_rect() # Rechteck erstellen
self.rect.topleft = (x, y) # Rechteck Position definieren
self.clicked = False #Klick-Zustand auf False gesetzt
self.start_img = pygame.image.load('pong_test.png').convert_alpha() # Bild für start_img ausw#hlen
#Erstellte Klasse auf Fenster platzieren
def draw(self, screen):
action = False #Variable "action" = False setzen
pos = pygame.mouse.get_pos() #Mausposition bestimmen und in 'pos' speichern
if self.rect.collidepoint(pos): #Überprüfen ob Maus mit Rechteck kollidiert
if pygame.mouse.get_pressed()[0] == 1 and self.clicked == False: #Linke Maustaste gefrückt(0) + Klick-Zustand = False dann:
self.clicked = True #Klick-Zustand auf True setzen und:
action = True #Action = True setzen
if pygame.mouse.get_pressed()[0] == 0: #Andernfalls ich kein Klick dann:
self.clicked = False #Klick-Zustand auf False setzen
screen.blit(self.image, (self.rect.x, self.rect.y)) #Blit Imagedatei auf Rechteckposition x und y
return action #Gibt 'action' zurück
class Highscore():
def __init__(self):
self.font = pygame.font.SysFont('Comic Sans MS', 30)
self.HighscoreX = 100
self.HighscoreY = 100
self.Highscore = int(Highscore.readHS(self))
def readHS(self):
with open('Highscore.CSV', 'r') as f:
return f.read()
def showHS(self):
self.high_render = self.font.render('Highscore:' + str(self.Highscore), True, (250, 0, 0))
self.screen.blit(self.high_render, (self.HighscoreX, self.HighscoreY))
class Menü(Highscore, Button):
def __init__(self):
Highscore.__init__(self)
Button.__init__(self,)
self.fenster_height = 1000 # Fensterhöhe definieren
self.fenster_width = 600 # Fensterbreite definieren
self.screen = pygame.display.set_mode((self.fenster_height, self.fenster_width))
self.run = True
self.font = pygame.font.SysFont('Comic Sans MS', 32)
self.screen.fill((96, 144, 189)) # Screen mit Farbe (255,255,255) füllen
Highscore.readHS(self)
Highscore.showHS(self)
def runMenü(self):
while True: # Während "run = TRUE"
Spiel1_button = Button(500, 300, self.start_img, 0.5)
if Spiel1_button.draw(self.screen):
for event in pygame.event.get():
# fenster schließen
if event.type == pygame.QUIT:
pygame.quit()
if event.type == pygame.MOUSEBUTTONDOWN:
print('test')
pygame.display.update() # Fenster wird aktualisiert
menu = Menü()
menu.runMenü()
Button
中的 __init__
方法有 5 个参数 self, x, y, image, scale
:
class Button(): #Klasse mit Namen 'Button' erstellen
def __init__(self, x, y, image, scale): #init Methode definieren
然而你在 Highscore
初始化方法中只传递了 1。
Button.__init__(self,)
您必须传递您定义的所有参数或将它们从 Button.__init__
中移除。
我正在尝试创建 class = 按钮的实例。我知道我必须将 Button 初始化到我的 Menü class 中才能使用它的变量。但是 PyCharm 告诉我缺少 4 个必需的位置参数。 我是 Python/Pygame 的初学者,所以尽可能保持简单:)
import pygame
import os
import sys
pygame.init()
#Button Klasse:
class Button(): #Klasse mit Namen 'Button' erstellen
def __init__(self, x, y, image, scale): #init Methode definieren
width = image.get_width() #Imageweite herausfinden
height = image.get_height() #Imagehöhe herausfinden
self.image = pygame.transform.scale(image, (int(width * scale), (int(height * scale))))
self.rect = self.image.get_rect() # Rechteck erstellen
self.rect.topleft = (x, y) # Rechteck Position definieren
self.clicked = False #Klick-Zustand auf False gesetzt
self.start_img = pygame.image.load('pong_test.png').convert_alpha() # Bild für start_img ausw#hlen
#Erstellte Klasse auf Fenster platzieren
def draw(self, screen):
action = False #Variable "action" = False setzen
pos = pygame.mouse.get_pos() #Mausposition bestimmen und in 'pos' speichern
if self.rect.collidepoint(pos): #Überprüfen ob Maus mit Rechteck kollidiert
if pygame.mouse.get_pressed()[0] == 1 and self.clicked == False: #Linke Maustaste gefrückt(0) + Klick-Zustand = False dann:
self.clicked = True #Klick-Zustand auf True setzen und:
action = True #Action = True setzen
if pygame.mouse.get_pressed()[0] == 0: #Andernfalls ich kein Klick dann:
self.clicked = False #Klick-Zustand auf False setzen
screen.blit(self.image, (self.rect.x, self.rect.y)) #Blit Imagedatei auf Rechteckposition x und y
return action #Gibt 'action' zurück
class Highscore():
def __init__(self):
self.font = pygame.font.SysFont('Comic Sans MS', 30)
self.HighscoreX = 100
self.HighscoreY = 100
self.Highscore = int(Highscore.readHS(self))
def readHS(self):
with open('Highscore.CSV', 'r') as f:
return f.read()
def showHS(self):
self.high_render = self.font.render('Highscore:' + str(self.Highscore), True, (250, 0, 0))
self.screen.blit(self.high_render, (self.HighscoreX, self.HighscoreY))
class Menü(Highscore, Button):
def __init__(self):
Highscore.__init__(self)
Button.__init__(self,)
self.fenster_height = 1000 # Fensterhöhe definieren
self.fenster_width = 600 # Fensterbreite definieren
self.screen = pygame.display.set_mode((self.fenster_height, self.fenster_width))
self.run = True
self.font = pygame.font.SysFont('Comic Sans MS', 32)
self.screen.fill((96, 144, 189)) # Screen mit Farbe (255,255,255) füllen
Highscore.readHS(self)
Highscore.showHS(self)
def runMenü(self):
while True: # Während "run = TRUE"
Spiel1_button = Button(500, 300, self.start_img, 0.5)
if Spiel1_button.draw(self.screen):
for event in pygame.event.get():
# fenster schließen
if event.type == pygame.QUIT:
pygame.quit()
if event.type == pygame.MOUSEBUTTONDOWN:
print('test')
pygame.display.update() # Fenster wird aktualisiert
menu = Menü()
menu.runMenü()
Button
中的 __init__
方法有 5 个参数 self, x, y, image, scale
:
class Button(): #Klasse mit Namen 'Button' erstellen
def __init__(self, x, y, image, scale): #init Methode definieren
然而你在 Highscore
初始化方法中只传递了 1。
Button.__init__(self,)
您必须传递您定义的所有参数或将它们从 Button.__init__
中移除。