IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Script qui ne s'exécute pas alors que la fenêtre Toplevel() est fermée


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2018
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Script qui ne s'exécute pas alors que la fenêtre Toplevel() est fermée
    Bonjour,
    Je programme un jeu de société (pour un projet en ISN), je lance la fonction qui tire au hasard la question puis le joueur répond, et une autre fonction qui vérifie la réponse du joueur se lance. Puis la fenêtre Toplevel() se détruit. Normalement le programme est censé se poursuivre mais rien ne se passe...sauf, quand je ferme la fenêtre principale, dans ce cas le programme se poursuit en m'affichant une erreur (bon l'erreur est normale vu que j'ai fermé la fenêtre), mais je souhaite savoir pourquoi le programme ne s'exécute pas alors que la fenêtre Toplevel() s'est détruite, car je suis obligé de fermer la fenêtre principale pour que le programme continue, ce que je ne veux pas puisque le jeu est sur la fenêtre principale.
    Merci de votre aide
    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    from tkinter import *
    import winsound
    import time as t
    from random import *
    def verif():
        global val , bonneRep , fenetreQuestion , mauvaiseRep
        val=var.get()
        if val == "1":
            bonneRep=Label(fenetreQuestion,text="Bonne réponse")
            bonneRep.place(x=450,y=150)
            print(val)
            verifJ1()
            #fenetreQuestion.destroy()
     
        elif val == "0":
            mauvaiseRep=Label(fenetreQuestion,text="Mauvaise réponse")
            mauvaiseRep.place(x=450,y=150)
            print(val)
            fenetreQuestion.destroy()
     
    def start():
        global temps1, temps2, chron , lab , finDuTemps , fenetreQuestion
        temps1= t.time()
        chrono()
    def chrono():
        global temps1, temps2, chron , lab
        temps2= t.time()
        chron=30-temps2+temps1
        lab.config(text=int(chron))
        if (chron>=0):
            fenetreQuestion.after(100,chrono)
        else:
            finDuTemps=Label(fenetreQuestion,text="Fin du temps imparti")
            finDuTemps.place(x=500,y=200)
            fenetreQuestion.after(1000,fermerPage)
     
    def fermerPage():
        for c in fenetreQuestion.winfo_children():
            c.destroy()
        fenetreQuestion.destroy()
     
    def questionFacile1():  #La question qui est choisi au hasard
        global var , lab , fenetreQuestion , question , reponse1 , reponse2 , reponse3 , bouttonValiderReponse , temps1, temps2, chron , lab , finDuTemps , fenetreQuestion , temps1, temps2, chron , lab
        fenetreQuestion=Toplevel()
        fenetreQuestion.title("questions")
        fenetreQuestion.geometry("1000x500")
     
        question=Label(fenetreQuestion,text="Combien Barbamama et Barbapapa ont-ils d'enfants ? ",fg="pink")
        question.place(x=450,y=20)
     
        var=StringVar()
     
        reponse1=Radiobutton(fenetreQuestion,text="7",variable=var, value="1",fg="red")
        reponse1.place(x=300,y=75)
     
        reponse2=Radiobutton(fenetreQuestion,text="9",variable=var,value="0",fg="red")
        reponse2.place(x=450,y=75)
     
        reponse3=Radiobutton(fenetreQuestion,text="20",variable=var,value="0",fg="red")
        reponse3.place(x=600,y=75)
     
        bouttonValiderReponse=Button(fenetreQuestion,text="Valider la réponse",command=verif,fg="green",bg="black")
        bouttonValiderReponse.place(x=450,y=110)
     
        lab=Label(fenetreQuestion, text="")
        lab.place(x=495,y=10)
        start()
        fenetreQuestion.mainloop()
     
    def verifJ1():  #Vérification de la réponse du joueur pour le faire avancer puis fermeture de la fenêtre
        global posX1 , posY1 , pionJ1 , pointsJ1 , can 
        val=var.get()
        if val == "1":
     
            pointSupp=randint(0,3)
            pointsJ1=pointsJ1+pointSupp
     
            #-----------------------Avancer ligne 1------------------------#
            if 20 <= posX1 < posTheorique5X1 and posY1 == 20:
                posX1=posX1+pas
                can.coords(pionJ1,posX1-15,posY1-15,posX1+15,posY1+15)
                fenetreQuestion.destroy()
     
     
     
    if ValNombreJoueurs == "0":   #C'est le déroulement d'un tour de jeu
     
            while posX1 == 20 and posY1 != 440 or posX2 == 60 and posY2 != 440:
                labelTour=Label(fen,text="Au tour du joueur 1:",fg="red",bg="black",font="bold 15")
                labelTour.place(x=600,y=600)
                listeQuestionsFaciles=[questionFacile1]    
                question=choice(listeQuestionsFaciles)
                print(question)
                type(question)
                question()
                verifJ1()
    Bon je suis sur que mon code n'est pas le plus propre et j'en suis désolé, mais j'ai essayé différentes choses comme passer le Toplevel() en Tk() mais 2 fenêtres principales c'est pas top et la marche pas. j'ai également essayé d'enlever le mainloop() à mon Toplevel() mais cela lance toutes les fonctions en même temps ce qu'il ne faut pas non plus car les joueurs jouent chacun leur tour

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    L'appel a mainloop ne se termine pas lorsque vous détruisez autre chose que la fenêtre principale. Il se termine lorsqu'on envoie .quit.
    Si vous voulez attendre la destruction d'une fenêtre, c'est plutôt .wait_window qu'il faut utiliser.
    Ceci dit, çà serait bien de faire un tour dans un tuto. tkinter pour apprendre à programmer avec cette bibliothèque plutôt que de trouver des solutions a des soucis créés par ignorance.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/12/2015, 22h45
  2. [10gR2] Script qui ne s'exécute pas correctement
    Par hazzab dans le forum SQL
    Réponses: 2
    Dernier message: 19/11/2015, 10h10
  3. Réponses: 6
    Dernier message: 31/07/2007, 15h48
  4. [Javascript] IE(page qui ne s'affiche pas alors que code html présent)
    Par Woufeigh dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/04/2007, 19h54
  5. Réponses: 4
    Dernier message: 28/12/2006, 18h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo