Ici on n'a que votre IP, votre pseudo et votre adresse mail que nous ne traitons pas.
Quand vous êtes enregistrés, une seule requête permet de vous afficher les messages que vous n'avez pas lus.
Primtux8 est arrivée! Rendez-vous ici
Vous pouvez désormais vous inscrire librement en cliquant sur "S'enregistrer".

Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Nombres de 1 à 99 : écriture chiffré depuis son
#1
Hello à tous
Juste une petite application à proposer.
AI dû faire ça pour des EBEP qui moulinent passé 10 et d'autres PPRE entre 60/80 et 80 / 99

Donc si ça vous tente, c'est là
https://framagit.org/CyrilleBiot/nombresGtk

[Image: screenshoot1.png]

Il met les logs dans le /home/$USER/.primtux/nombresGtk/nombresGtk.log
Pour l'instant brut de brut mais quand j'aurais le temps j'essayerai de les mettre dans un textview

N'hésitez pas faire des remarques, j'essaierai d'en tenir compte... mais rentrée encore plus speed que les autres... donc en pointillés.

Bye à tous Wink
All you need : #!/bin/bash
Répondre
#2
Bon, test rapide :

Si je ne fais aucune saisie mais que je valide :

Code :
➤ File "/home/jferry/Desktop/primtux/nombresGtk/./source/nombresGtk.py", line 251, in valider_nombre
    if int(self.label_nombre.get_text()) == self.nb_hasard:
<class 'ValueError'> invalid literal for int() with base 10: ''() with base 10: '')

C'est bien d'avoir mis un README !
petit coquille en revanche pour lancer sous git :

Code :
./source/nombresGtk.py

Sinon, pourquoi les logs dans le home ? En général c'est dans /var/nombresGtk

about => à propos (tant qu'à faire, être en français partout)

au lieu de plage = "0-10", changer par "de 0 à 10". (c'est plus parlant)

J'aurais pas nommé ton projet avec "gtk" dedans : n'hésites pas à mettre du fun dans les noms de soft, c'est plus facile à retenir.

Enfin, je suis pas fan de l'ergonomie. Tu as tout sur le même écran.
Idéalement : un écran pour mettre son nom et choisir le type d'exo.

Une fois que tu arrives sur la partie exo, tu peux faire un petit décompte de 3 secondes pour que l'élève se prépare et après ça lit 1er son dans la foulée.
Du coup, pas de bouton "écouter" mais éventuellement "ré-écouter".
Eviter la possibilité de changer de plage en cours de route. (tout simplement, ne pas afficher les plages pendant l'exercice en cours)

Dès que l'exercice est fini :

Afficher uniquement le score et la possibilité de sélectionner une autre plage.

Voilà, je conçois que ça fait un peu de changements : rien d'urgent, c'est fonctionnel et ça peu être intégré tel quel.
Répondre
#3
Salut Jeremy

Oui, je sais le graphisme et moi, ça fait 2....

Je suis pour l'idée d'une fenetre pour le nom la config puis le jeu mais le hic c'est que je ne sais pas passer les variables entre elles.
Si tu avais un exemple windows1 avec une entry un bouton qui ouvre la wiindows 2 avec un simple label reprenant l'entréee saisie, je suis partant pour voir comment ça se passe. J'ai déjà essayé meme je m'emmele entre les classes et les windows et j'obtiens rien.... Donc un coup de pouce serait le bienvenu Wink

OK pour les autres changements j'essaie d'apporter les corrections au plus vite. Je vais tester demain avec mes élèves, je verrai bien si bugs...

Bonne soirée
All you need : #!/bin/bash
Répondre
#4
cyrille a écrit :Oui, je sais le graphisme et moi, ça fait 2....

C'est même pas du graphisme mais de l'UX.
Je t'encourage à passé par l'étape papier (prototype) avant de te lancer à corps perdu dans la programmation.

Pour ce qui est de te fournir un exemple, je vais voir pour te faire ça : à mon avis, faut pas réfléchir une "window" diff pour chaque étape mais plutôt une "window" pour l'ensemble de l'app et des éléments qui apparaissent et disparaissent.
Répondre
#5
Citation :C'est même pas du graphisme mais de l'UX.
C'est quoi ce truc ?
Citation : avant de te lancer à corps perdu dans la programmation.
Vu le temps libre imparti, je fais au mieux Wink

Merci pour l'exemple Wink
Juste comment rattraper des variables entre 2 windows et comme lancer une fenetre fille depuis un parent (de façon propre)


++
C
All you need : #!/bin/bash
Répondre
#6
Bon j'ai trouvé cette histoire de passage de variable. Visiblement je n'avais pas le bon raisonnement. ça devrait m'aider. Je vais réécrire le skeud

Code :
[== Undefined ==]
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class DialogExample(Gtk.Dialog):

    def __init__(self, parent):
        Gtk.Dialog.__init__(self, "My Dialog", parent, 0,
            (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
             Gtk.STOCK_OK, Gtk.ResponseType.OK))

        self.result = ""
        self.set_default_size(150, 100)
        self.connect("response", self.on_response)

        label = Gtk.Label(label="Type something")
        self.entry = Gtk.Entry()

        box = self.get_content_area()
        box.add(label)
        box.add(self.entry)
        self.show_all()

    def on_response(self, widget, response_id):
        self.result = self.entry.get_text ()

    def get_result(self):
        return self.result

class DialogWindow(Gtk.Window):


    def __init__(self):
        Gtk.Window.__init__(self, title="Dialog Example")
        self.set_border_width(6)

        box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
        self.add(box)

        button = Gtk.Button(label="Open dialog")
        button.connect("clicked", self.on_button_clicked)
        box.add(button)

        self.label = Gtk.Label()
        box.add(self.label)



    def on_button_clicked(self, widget):
        dialog = DialogExample(self)
        response = dialog.run()

        if response == Gtk.ResponseType.OK:
            self.label.set_text(dialog.get_result())
            print("The OK button was clicked")
        elif response == Gtk.ResponseType.CANCEL:
            print("The Cancel button was clicked")

        dialog.destroy()

win = DialogWindow()
win.on_button_clicked(win)
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
All you need : #!/bin/bash
Répondre
#7
Mais, tu te compliques la vie pour rien.
Ca va pas ton histoire de window et de dialogue : tu ré-ouvres un truc alors que ça peut rester sur la même fenêtre.

Je te donne un exemple plus propre.
La, ce qu'il te faut c'est une et une seul window avec des zones d'affichages différentes.
Voilà ce que je te propose :
Tu as des Vbox (correspond à des zones d'affichages) que tu mets dans tes propriétés de classes (pour pouvoir y accéder dans toute ta classe).
Tu déclares toute ton interface dès le début. (comme ça, tout est en mémoire, pas de clignotement)

Tu dis à gtk de tout dessiner : self.show_all()
Puis tu caches ce qui ne doit pas apparaitre à la première étape : en fait tout sauf la zone de saisie de nom.
Après, c'est juste un jeu de cache-cache : selon l'action, tu vas cacher ou afficher une ou plusieurs zones.

Code :
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GdkPixbuf, Gdk

class nbGtk(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Apprentissage des nombres")
        self.set_resizable(True)
        self.set_border_width(10)
        
        hbox = Gtk.HBox()

        self.vbox_debut = Gtk.VBox()
        label_nom = Gtk.Label(label="Ton nom :")
        entry_nom = Gtk.Entry()
        entry_nom.set_name('nom')
        button_commencer = Gtk.Button(label="C'est parti !")
        button_commencer.connect("clicked", self.commencer_jeux)
        self.vbox_debut.add(label_nom)
        self.vbox_debut.add(entry_nom)
        self.vbox_debut.add(button_commencer)

        self.vbox_exercice = Gtk.VBox()
        button_lire_son = Gtk.Button(label="ECOUTER SON")
        self.vbox_exercice.add(button_lire_son)

        hbox.add(self.vbox_debut)
        hbox.add(self.vbox_exercice)
        self.add(hbox)
        self.show_all()

        self.vbox_exercice.hide()

    def commencer_jeux(self, button):
        self.vbox_debut.hide()
        self.vbox_exercice.show()

if __name__ == "__main__":
    win = nbGtk()
    win.connect("destroy", Gtk.main_quit)
    win.move(10, 10)
    Gtk.main()
Répondre
#8
Bon finalement ça marche bien avec une fenetre dialog mais toujours à la recherche d'un exemple avec une fenetre main qui ouvre une fenetre child et dont onn récupère la varaible d'une entry, par exemple
All you need : #!/bin/bash
Répondre
#9
Je comprend pas ton obsession d'utiliser des dialogues ou des fenêtres diff ?
Dans 90% des cas, c'est une mauvaise pratique ergonomique.

Là, à chaque action de ton utilisateur, ça ré-ouvre une fenêtre avec des tailles différentes.
Aucun soft sérieux ne fait ça. T'as une fenêtre qui s'ouvre avec une taille et le contenu change.
Les dialogues ça sert à des trucs comme éditer les préférences.
Répondre
#10
Citation :Je comprend pas ton obsession d'utiliser des dialogues ou des fenêtres diff ?

Hé pas beaucoup de temps à consacrer à la propgrammation donc des fois je m'enlise dans des trucs évidents à tes yeux mais pas forcement aux miens. En plus j'essaie toujours d'apprendre une nouvelle notion par programme ici je m'étais mis en tête le passage de variable par fenêtre.... En oubliant que c'est de la PDO et qu'il suffisait t'interroger simplement l'objet....
Par contre c'est positif car ça permet de mieux comprendre certains élèves qui au bout de 10 ré explications ne comprennent toujours pas. C'est pas forcément la notion mais la vision de la notion qui foire alors dans ce cas

Bon passons et merci, j'ai ENFIN compris ce que tu voulais dire et j'avoue que c'est bien plus simple effectivement ainsi. D'un autre coté j'ai réussi également à force de recherche à comprendre comment passer des données en des parents et des filles. Donc ça roule.

J'essaye de mettre tout ça en application ASAP. Je ne suis pas un programmeur pro donc je fais avec le temps alloué et tu dois avoir plus de recul que moi donc mieux saisir les problématiques. Jamais bon de faire qq chose dans la précipitation, mais en moment dans l'EN c'est notre style de vie....

Merci à toi.
All you need : #!/bin/bash
Répondre
#11
Coucou cyrille !

Connais tu par hasard cette librairie https://github.com/PySimpleGUI/PySimpleGUI , c'est fait pour faire très très simplement des petits logiciels gui sur python rapidement.
Répondre
#12
Oui mais avec Jeremie on s'était entendu pour les faire en GTK
All you need : #!/bin/bash
Répondre
#13
cyrille a écrit :Hé pas beaucoup de temps à consacrer à la propgrammation donc des fois je m'enlise dans des trucs évidents à tes yeux mais pas forcement aux miens.

Je sais ce que c'est de s'entêter et je pense pas que c'est un soucis lié au fait d'être pro ou non.
Tu veux absolument résoudre un soucis de tel manière alors qu'on final, si on reprend un peu de hauteur, on s'aperçois qu'il y a d'autres façon de faire.

Là, tu m'as donné ton point de blocage et tu m'as demandé de l'aide. Je te l'ai donné mais sans répondre volontairement à ton soucis.
Ca ne t'as pas convenu et tu as continué dans ta voie.

Je sais que c'est une gymnastique mentale difficile et crois moi, je suis aux première loges :
Il m'arrive encore d'avoir des électrochocs du genre et ça peut venir de personnes plus jeunes, moins expérimentés etc.
Au final, ça permet de développer des aptitudes qui ne sont pas que d'ordre technique tel que la remise en question.

Maintenant, quand tu crées un outil utilisé par d'autre, je pense qu'il est toujours nécessaire de se mettre dans la peau des utilisateurs.
Si tu commences à réfléchir comme ça, tu vas aussi progresser sur le temps passé à faire quelque chose (sans le refaire inlassablement)

Citation :Jamais bon de faire qq chose dans la précipitation, mais en moment dans l'EN c'est notre style de vie....

Ca, j'ai l'impression que c'est le quotidien de tellement de métiers.
y'a sans doute pas de formule magique pour s'en sortir mais j'imagine que ceux qui s'en sortent le mieux savent : prioriser leurs tâches, gérer leur stress, organiser leur pensée, ne pas s'attarder sur des choses trop coûteuses etc.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)