Partage
  • Partager sur Facebook
  • Partager sur Twitter

Traceback (most recent call last):

Sujet résolu
    3 janvier 2022 à 1:11:51

    Bonsoir, j'ai un probleme concernant un jeux que j'essaye de développer (le concept est que les masques s'enlevent aleatoirement des eleves et en cliquant on doit les remettres; c'est comme le jeu de tape taupe). Lorsque que le lance voici ce qu'ils m'affichent :

    Traceback (most recent call last):

      File "C:\Users\jeans\PycharmProjects\pythonProject\main.py", line 51, in <module>
        chrono = Chrono(position=(470, 20), font=font)
      File "C:\Users\jeans\PycharmProjects\pythonProject\main.py", line 19, in __init__
        self.chrono = datetime.combine(date.today(), time.time(0, 0))
    TypeError: time.time() takes no arguments (2 given)
    Je crois que c'est parceque j'utlise 2 bibliothèques time mais je ne sais pas y remédier,
    votre aide est la bienvenu voici mon code :)
    import pygame
    from pygame import display
    from pygame.locals import *
    from datetime import timedelta, datetime, date, time
    import random
    import time
    
    pygame.init()
    blanc = (255, 255, 255)
    screen = pygame.display.set_mode((1128, 839))
    running = True
    # création de la fenêtre
    
    temps_masques = random.uniform(4.5, 10)
    nb_masques_enleve = random.uniform(3, 8)
    
    class Chrono:
        def __init__(self, position, font, color=(255, 255, 255)):
            self.chrono = datetime.combine(date.today(), time.time(0, 0))
            self.font = font
            self.color = color
            self.label = self._make_chrono_label()
            self.rect = self.label.get_rect(topleft=position)
    
        def _make_chrono_label(self):
            "Crée une Surface représentant le temps du chrono"
            return font.render(self.chrono.strftime("%H : %M : %S"),
                               True, self.color)
    
        def update(self, dt):
            """Mise à jour du temps écoulé.
    
            dt est le nombre de millisecondes
            """
            old_chrono = self.chrono
            self.chrono += timedelta(milliseconds=dt)
            # Comme le chrono n'indique pas les fractions de secondes,
            # on ne met à jour le label que si quelque chose de visible a changé
            if old_chrono.second != self.chrono.second:
                self.label = self._make_chrono_label()
    
        def draw(self, surface):
            surface.blit(self.label, self.rect)
    
    
    pygame.display.set_caption("Chrono")
    
    font = pygame.font.Font(None, 64)
    fps_clock = pygame.time.Clock()
    
    chrono = Chrono(position=(470, 20), font=font)
    # on a créer le chronomètre grâce à une classe
    
    classe = pygame.image.load("salle_de_classe.jpg").convert_alpha()
    masque = pygame.image.load("masque.png").convert_alpha()
    masque.set_colorkey(blanc)
    masque_penché = pygame.image.load("masque_penché.png").convert_alpha()
    masque_penché.set_colorkey(blanc)
    masque_prof = pygame.image.load("masque_prof.png").convert_alpha()
    masque_prof.set_colorkey(blanc)
    masque_prof_penché = pygame.image.load("masque_prof_penché.png").convert_alpha()
    masque_prof_penché.set_colorkey(blanc)
    # masques des étudiants et proffesseurs créés
    
    masques = [[526, 351], [526, 493], [526, 630], [675, 630], [813, 630], [373, 630], [224, 630], [646, 347], [768, 351], [393, 348], [252, 348], [650, 486], [782, 485], [385, 496], [251, 487], [309, 235], [448, 231], [593, 236], [729, 229]]
    
    musique_classe = pygame.mixer.Sound("musique_classe.mp3")
    musique_classe.set_volume(0.5)                 # on créer une variable représentant la musique d'ambiance de la salle de classe
    
    click_masque = pygame.mixer.Sound("son_masque.ogg")        # on créer une variable représentant le bruit lorsque l'on click sur un masque
    click_masque.set_volume(1.0)
    
    
    while running:
        musique_classe.play(1, 0, 3000)    # on intègre cette musique au jeu
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False         # on peut maintenant fermer la fenêtre
    
            if event.type == pygame.MOUSEBUTTONUP:       # on peut cliquer sur les masques avec le boutton gauche de la souris
                pos = pygame.mouse.get_pos()
                masquesRestants = []
                for i in range(len(masques)):
                    if not pygame.Rect(masques[i][0], masques[i][1], masque.get_width(), masque.get_height()).collidepoint(pos):
                        masquesRestants.append(masques[i])   
                masques = masquesRestants                   # les masques cliqués disparaissent
    
            if event.type == pygame.MOUSEBUTTONDOWN:
                click_masque.play(1, 6000, 0)
    
        screen.blit(classe, (0, 0))
        for i in range(len(masques)):
            masques_enleve = []
            time.sleep(temps_masques)
            masque_rect = masque.get_rect()
            if not pygame.Rect(masques[i][0], masques[i][1],masque_rect.x, masque_rect.y, masque_rect.width, masque_rect.height):
                masques_enleve.append(masques[i])
                for j in range(nb_masques_enleve):
                    random.choice(masques_enleve)
                    display.update(masque_rect.x, masque_rect.y, masque_rect.width, masque_rect.height)
        for i in range(len(masques)):
            screen.blit(masque, (masques[i]))
        screen.blit(masque_prof, (908, 334))
        screen.blit(masque_penché, (968, 630))
        screen.blit(masque_prof_penché, (30, 343))
        # les masques sont placés sur le visage des élèves et professeurs visuellement
    
    
        dt = fps_clock.tick(60)
        chrono.update(dt)
        chrono.draw(screen)
        pygame.display.flip()
    
    
    pygame.quit()
    • Partager sur Facebook
    • Partager sur Twitter
      3 janvier 2022 à 2:44:46

      Et ça ne marche pas si tu remplaces time.time par seulement time?

      >>> from datetime import time                                                                                           
      >>> str(time(0, 0))                                                                                                     
      '00:00:00'                                                                                                              

      >>> import time                                                                                                         
      >>> n=time.time();n                                                                                                     
      1641174546.7852445                                                                                                      

      -
      Edité par PierrotLeFou 3 janvier 2022 à 3:16:12

      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        3 janvier 2022 à 6:55:52

        RaphaelLAURET a écrit:

        Je crois que c'est parceque j'utlise 2 bibliothèques time mais je ne sais pas y remédier,

        votre aide est la bienvenu voici mon code :)


        Si on écrit:

        from datetime import timedelta, datetime, date, time
        import time

        l'import time viendra écraser la variable time créée par from datetime import time.

        Une solution est de préfixer ce qu'on importe d'un module. Par exemple:

        import datetime as dt

        puis on écrira dt.time, dt.timedelta,... mais on peut le faire juste pour l'utilisation de datetime.time.


        • Partager sur Facebook
        • Partager sur Twitter
          3 janvier 2022 à 10:12:33

          mps a écrit:

          RaphaelLAURET a écrit:

          Je crois que c'est parceque j'utlise 2 bibliothèques time mais je ne sais pas y remédier,

          votre aide est la bienvenu voici mon code :)


          Si on écrit:

          from datetime import timedelta, datetime, date, time
          import time

          l'import time viendra écraser la variable time créée par from datetime import time.

          Une solution est de préfixer ce qu'on importe d'un module. Par exemple:

          import datetime as dt

          puis on écrira dt.time, dt.timedelta,... mais on peut le faire juste pour l'utilisation de datetime.time.


          Merci beaucoup pour l'aide.



          • Partager sur Facebook
          • Partager sur Twitter
            3 janvier 2022 à 10:18:13

            RaphaelLAURET a écrit:

            Merci beaucoup pour l'aide.

            Bonjour,

            Sujet résolu

            Tu peux passer le sujet à "résolu" (bouton en haut à droite du sujet) et cliquer sur les pouces levés des messages qui t'ont aidé⋅e ;)

            • Partager sur Facebook
            • Partager sur Twitter

            Traceback (most recent call last):

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            • Editeur
            • Markdown