#!/usr/bin/env python3 # coding: iso-8859-15 # Importation pour creation Fenetre import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk, GLib, Pango from random import choice class FenetrePrincipale: # ******************************************************************************************** # ----------------- Initialisation Fenetre --------------------------------------------------- # ******************************************************************************************** nbr_questions = 0 bonnes_reponses = 0 question = [] chances_restantes = 2 def __init__(self): self.gladefile = "python_13.glade" self.builder = Gtk.Builder() self.builder.add_from_file(self.gladefile) self.builder.connect_signals(self) # Construction Fenetre Principale self.window = self.builder.get_object("Fenetre_Base") # Récupêration objets self.label_score = self.builder.get_object("label_score") self.label_intitule_question = self.builder.get_object("label_intitule_question") self.label_question = self.builder.get_object("label_question") self.entry_reponse = self.builder.get_object("entry_reponse") self.bouton_ok = self.builder.get_object("bouton_ok") self.bouton_solution = self.builder.get_object("bouton_solution") self.image_smiley = self.builder.get_object("image_smiley") self.dialogue_a_propos = self.builder.get_object("Dialogue_A_Propos") #self.dialogue_solution = self.builder.get_object("Dialogue_Solution") #self.label_solution = self.builder.get_object("Label_Solution") # Valeur au départ self.image_smiley.set_from_file("bof.png") self.bouton_solution.set_sensitive(False) """ # Construction Boite Dialogue A propos self.aboutdialog = self.builder.get_object("Boite_Apropos")""" # pour le pulse de l'Entry Recherche coté gauche self.timeout_id = None self.entry_reponse.set_progress_pulse_step(0.1) # Call self.do_pulse every 100 ms self.timeout_id = GLib.timeout_add(100, self.do_pulse, None) # chargement try: self.chargement("questions_auteurs.txt") self.nouvelle_question() except IOError: self.Destroy() # Permet de détruire la fenetre principale self.window.connect("delete-event", Gtk.main_quit) self.window.show() #self.dialogue_solution.destroy() # ******************************************************************************************** # -------------------- Definition Méthodes --------------------------------------------------- # ******************************************************************************************** def chargement(self, fichier): # Lecture du fichier des questions try: with open(fichier, 'r') as f: consigne = f.readline().strip('\n') # on remet les questions à zéro -- Ajout parceque menu chargement nouveau questionnaire_choisi # sinon les nouvelles questions se rajouteraient aux anciennes self.question[:] = [] for ligne in f: self.question.append(ligne.strip(' \n')) # Toujours a cause choix nouveelle question self.nbr_questions = 0 self.bonnes_reponses = 0 self.image_smiley.set_from_file("bof.png") #--------------------------- self.label_intitule_question.set_text(consigne) except IOError: # as (errno, strerror): #dialogue = wx.MessageDialog(self, 'Erreur de lecture fichier: ' + strerror, "Erreur!", wx.OK | wx.ICON_ERROR) #dialogue.ShowModal() # Permet d'afficher la boite Modale qui reste tant que l'on clique pas dessus #dialogue.Destroy() # Pour détruire la fenêtre après le clic raise IOError # relance l'exception # ******************************************************************************************** def nouvelle_question(self): self.chances_restantes = 2 self.bouton_solution.set_sensitive(False) #aller chercher nouvelle question self.question_reponse = choice(self.question) self.nbr_questions +=1 self.label_question.set_text(self.question_reponse.split(':')[0] + ' ?') # Efface la réponse précedante self.entry_reponse.set_text('') # Positionne ou l'on doit répondre self.entry_reponse.grab_focus() # ******************************************************************************************** # Fonction pour faire pulser l'Entry Recherche à gauche def do_pulse(self, user_data): self.entry_reponse.progress_pulse() return True # ******************************************************************************************** # Fonction pour le bouton OK - On vérifie la réponse def on_bouton_ok_clicked(self, button): print("ok") self.chances_restantes -= 1 question_suivante = False reponse = self.entry_reponse.get_text().lower() reponse_ok = self.question_reponse.split(':')[1].lower() if reponse == reponse_ok: #reponse == unicode(reponse_ok): if self.chances_restantes == 1: self.bonnes_reponses += 1 self.image_smiley.set_from_file("super.png") else: self.bonnes_reponses += 0.5 self.image_smiley.set_from_file("bien.png") question_suivante = True else: self.image_smiley.set_from_file("rate.png") if self.chances_restantes == 1: #Autoriser la Solution self.bouton_solution.set_sensitive(True) else: #self.donner_solution(wx.MouseEvent()) print("Faux") if question_suivante: # Affichage score self.label_score.set_text(str(self.bonnes_reponses) + "/" + str(self.nbr_questions)) # Nouvelle question self.nouvelle_question() else: # Efface la réponse précedante self.entry_reponse.set_text('') # Positionne ou l'on doit répondre self.entry_reponse.grab_focus() # ******************************************************************************************** # Fonction pour le bouton Solution def on_bouton_solution_clicked(self, button): print("solution") reponse_ok = self.question_reponse.split(':')[1].lower() print(reponse_ok) self.dialogue_solution = self.builder.get_object("Dialogue_Solution") self.dialogue_solution.format_secondary_text(reponse_ok) self.dialogue_solution.run() """if response == Gtk.ResponseType.OK: self.image_smiley.set_from_file("bof.png") # Affichage score self.label_score.set_text(str(self.bonnes_reponses) + "/" + str(self.nbr_questions)) # Nouvelle question self.nouvelle_question()""" #self.dialogue_solution.destroy() self.image_smiley.set_from_file("bof.png") # Affichage score self.label_score.set_text(str(self.bonnes_reponses) + "/" + str(self.nbr_questions)) # Nouvelle question self.nouvelle_question() self.dialogue_solution.destroy() # ******************************************************************************************** # Fonction pour le bouton Solution - OK et Sortir """def on_Bouton_Solution_OK_clicked(self, button): print("on_Bouton_Solution_OK_clicked") self.dialogue_solution.destroy()""" # ******************************************************************************************** # Fonction pour le bouton Solution """def on_Bouton_Solution_Sortir_clicked(self, button): print("on_Bouton_Solution_Sortir_clicked") self.dialogue_solution.destroy()""" # ******************************************************************************************** # ----------------- Autres classes ----------------------------------------------------------- # ******************************************************************************************** """class DialogueSolution(Gtk.Dialog): def __init__(self, parent): Gtk.Dialog.__init__(self, title="Solution", flags=0) self.add_buttons(Gtk.STOCK_OK, Gtk.ResponseType.OK) self.set_default_size(150, 100) reponse_ok = self.question_reponse.split(':')[1].lower() label = Gtk.set_text(label="La réponse est : " + reponse_ok) box = self.get_content_area() box.add(label) self.show_all()""" # Si ceci est exécuté seul, exécutez ce qui suit après le 'si' # Si cette classe est importée dans un autre programme, le code après le 'if' # pas exécuté. Cela rend le code plus flexible. if __name__ == "__main__": main = FenetrePrincipale() Gtk.main()