Ligne 1 : |
Ligne 1 : |
| {{RASP-PYGAME-GUI-NAV}} | | {{RASP-PYGAME-GUI-NAV}} |
− |
| |
− | {{traduction}}
| |
| | | |
| == Installation == | | == Installation == |
Ligne 51 : |
Ligne 49 : |
| | | |
| == Démarrer == | | == Démarrer == |
− | At the top here we've now imported the pygameui library. We use it quite a bit later on so {{fname|ui}} is a nice short alias for it.
| + | Au début du script, nous importons la bibliothèque {{fname|pygameui}}. Comme nous l'utiliserons régulièrement dans le code, nous lui associons l'alias {{fname|ui}} (plus sympa et plus court à taper). |
| | | |
− | The other key addition here is {{https://docs.python.org/2/library/logging.html logging}}. When using more libraries and frameworks it's very useful to set up logging so you can see the output in a file or, in this case, on the console. We're also able to configure the logger into {{fname|DEBUG}} mode so we can really see what's going on underneath our code and troubleshoot if needs be.
| + | L'autre ajout important ici est [https://docs.python.org/2/library/logging.html logging]. Il est utile de mettre une trace (''logging'') en place Lorsque l'on utilise plusieurs bibliothèques et frameworks pour façon à voir les sorties dans un fichier (ou dans ce cas, sur une console). Il est également possible de définir le logger en mode {{fname|DEBUG}} de manière à voir ce qui se passe sous votre code et effectuer des corrections si nécessaire. |
| | | |
| <syntaxhighlight lang="python"> | | <syntaxhighlight lang="python"> |
Ligne 62 : |
Ligne 60 : |
| import RPi.GPIO as GPIO | | import RPi.GPIO as GPIO |
| | | |
− | #Setup the GPIOs as outputs - only 4 and 17 are available | + | # Configurer les GPIOs comme sortie (OUTPUT) - Seuls 4 et 17 sont disponibles |
| GPIO.setmode(GPIO.BCM) | | GPIO.setmode(GPIO.BCM) |
| GPIO.setup(4, GPIO.OUT) | | GPIO.setup(4, GPIO.OUT) |
| GPIO.setup(17, GPIO.OUT) | | GPIO.setup(17, GPIO.OUT) |
| | | |
| + | # Format de trace |
| + | # Definition d'un flux pour le logger (flux associé à la console) |
| log_format = '%(asctime)-6s: %(name)s - %(levelname)s - %(message)s' | | log_format = '%(asctime)-6s: %(name)s - %(levelname)s - %(message)s' |
| console_handler = logging.StreamHandler() | | console_handler = logging.StreamHandler() |
| console_handler.setFormatter(logging.Formatter(log_format)) | | console_handler.setFormatter(logging.Formatter(log_format)) |
| + | # Definir la trace |
| logger = logging.getLogger() | | logger = logging.getLogger() |
| logger.setLevel(logging.DEBUG) | | logger.setLevel(logging.DEBUG) |
− | logger.addHandler(console_handler) | + | logger.addHandler(console_handler) # Sortie trace sur console |
| | | |
| os.putenv('SDL_FBDEV', '/dev/fb1') | | os.putenv('SDL_FBDEV', '/dev/fb1') |
Ligne 80 : |
Ligne 81 : |
| | | |
| == Définition de l'interface utilisateur == | | == Définition de l'interface utilisateur == |
− | For some hints on how to use widgets within the framework take a look at the [https://github.com/fictorial/pygameui/blob/master/bin/pygameui-kitchensink.py kitchen sink (pygameui-kitchensink.py)] script.
| + | Pour quelques astuces sur l'utilisation des widgets avec le framework vous pouvez consulter le script [https://github.com/fictorial/pygameui/blob/master/bin/pygameui-kitchensink.py kitchen sink (pygameui-kitchensink.py)] . |
| | | |
− | The basic principle is that you define a class that inherits from {{fname|ui.Scene}} and in the {{fname|__init__}} method you define all the widgets. A Scene is the full window, in our case the entire display (320,240).
| + | Le principe de base c'est qu'il faut définir une classe qui hérite de {{fname|ui.Scene}} et dans la méthode {{fname|__init__}} vous définissez tous les widgets. Une ''Scene'' est une fenêtre compllète, dans notre cas c'est l'afficheur en entier (320,240). |
| | | |
− | Each button's position and size is defined using a {{fname|ui.Rect}} and a text label is also supplied. An {{fname|on_clicked}} handler is then assigned - this handler is called when the button is clicked. In our case this is the {{fname|gpi_button}} method.
| + | La poisition et la taille de chaque bouton est défini en utilisant {{fname|ui.Rect}} et un libellé (''text label'') est également disponible. Un gestionnaire d'événement {{fname|on_clicked}} (aussi appelé "''handler''" en anglais) est alors assigné - ce ''handler'' est appelé lorsque l'on clique sur le bouton. Dans notre cas, le ''handler'' est la méthode {{fname|gpi_button}} . |
| | | |
− | The {{fname|gpi_button}} method simply looks at the label of the button that's been clicked to determine which GPIO to set on or off.
| + | La méthode {{fname|gpi_button}} vérifie simplement le libellé du bouton qui à été clické pour déterminer le GPIO qu'il faut allumer ou éteindre. |
| | | |
| <syntaxhighlight lang="python"> | | <syntaxhighlight lang="python"> |
Ligne 129 : |
Ligne 130 : |
| | | |
| == La boucle principale == | | == La boucle principale == |
− | This is a key point. The main loop of you program is now taken care of by pygameui. The [https://en.wikipedia.org/wiki/Inversion_of_control control has been inverted] - we've supplied pygameui with code to call when certain user actions occur.
| + | C'est le point clé du programme. La boucle principale de votre programe est maintenant pris en charge par pygameui. Le [https://en.wikipedia.org/wiki/Inversion_of_control contrôle du programme est ''inversé''] - Nous fournissons à pygameui le code a appeler lorsque certaines actions utilisateurs arrivent. |
| | | |
− | The pygameui main loop is started with this final line of code:
| + | La boucle principale de pygameui est démarré à l'aide de cette dernière ligne de code: |
| | | |
| <syntaxhighlight lang="bash"> | | <syntaxhighlight lang="bash"> |
Ligne 137 : |
Ligne 138 : |
| </syntaxhighlight> | | </syntaxhighlight> |
| | | |
− | As usual, you can run this from the pygamelcd project:
| + | Comme d'habitude, vous pouvez exécuter ce programme depuis le projet pygamelcd : |
| | | |
| <syntaxhighlight lang="bash"> | | <syntaxhighlight lang="bash"> |