Du libre, du code, des idées, du mélange d’ArraKISS…

De l’épice pour la pensée

OPaMa est un gestionnaire de paquets pour OpenBSD. qui utilise les outils pkg_*.

Comment ça, ça ne sert à rien :D ?
Peut-être pas à tout le monde, mais j'avais envie, voilà. :P

Il permet notamment de :

  • Chercher des paquets.
  • Obtenir la description d'un paquet.
  • Lister les paquets installés.
  • Installer/Désinstaller un paquet.
  • Supprimer les paquets inutiles.
  • Modifier le dépôt utilisé (fichier /etc/installurl).

Vous le trouverez sur framagit : https://framagit.org/Thuban/opama.

aperçu d'opama 1
aperçu d'opama 2
aperçu d'opama 3
aperçu d'opama 4
aperçu d'opama 5

Voilà quelques temps que j'écris quelques petis outils utilisant la bibliothèque tkinter. Cette dernière me paraît toujours aussi pratique pour des petites interfaces, mais aussi finalement très puissante en terme de fonctionnalités. Elle est toute légère et je ne m'en lasse pas.
Je me suis aussi aperçu que dans mes dossiers, c'était le bazar : des vieux scripts tous vilains trainaient ci et là.
Au lieu de continuer à en mettre un peu partout, j'ai fait du tri dans mon dépôt de code et un peu de classement. J'en ai profité pour mettre de l'ordre sur mon site, et je vous propose de faire un petit tour sur la page qui recence les quelques programmes basés sur Tk à cet endroit. Il y a de nouvelles choses, des ancienes, mais aussi de la place pour ce qui doit venir ;)

N'hésitez pas à piocher dedans, c'est sous licence libre :)

Je bosse sur des bouts de code en ce moment, et dans une application, je voulais proposer des notifications.
Après avoir modifié des bouts de code trouvés ci et là, j'ai pensé que ça pourrait tout aussi bien faire office de remplaçant à notify-send ou autre notifier basé sur GTK ou autre : Nobelium était né.
Ce dernier se base sur tkinter, c'est donc très léger. Il affiche un message à l'emplacement souhaité de l'écran, peut contenir des images, il est animé et ses couleurs peuvent être modifiées.

Vous trouverez le code sur framagit : https://framagit.org/Thuban/No

Voici à quoi il ressemble :

alt

alt

À titre d'exemple, j'ai utilisé ce code pour écrire un démon qui m'envoie des notifications sur ce que mon lecteur de musique MPD joue que j'ai appelé Mn.
Voici ce que ça donne :

alt

Enjoy ;)

Alors que je bricole 2-3 trucs sur mes sessions, je râle à chaque fois qu'un script doit utiliser zenity. C'est censé être de petits outils rapides, mais la moindre petite fenêtre met 3 plombes à s'ouvrir le temps que toutes les libs GTK soient chargées.

J'ai donc eu envie de refaire un zenity à ma façon à partir de la librairie tkinter, et ça donne ZeniTK.

L'outil ne propose pas encore autant d'options que zenity, et je ne suis pas certain d'en rajouter sauf si j'en ai besoin ou si des contributions sont proposées.

On peut déjà profiter des éléments suivants :

  • Alertes habituelles :

  • Entrer et récupérer ce que l'utilisateur a écrit :
  • Sélection de fichier ou répertoire avec éventuellement filtre d'extensions :
  • Barre de progression :
  • Afficher et éditer du texte :

Ce dernier permet de faire un éditeur de texte tout bête pour prendre des notes par exemple :

#!/bin/sh

DIR=~/Documents/notes
mkdir -p $DIR

N=$(zeniTK --title="Nouvelle note" --text="Nom de la nouvelle note : " --entry)

if [ -n "$N" ]; then
        RES=$(cat "$DIR/$N" | zeniTK --text-info)
        if [ -n "$RES" ]; then
                echo $RES > "$DIR/$N"
        fi
fi
exit
  • Sélecteur de couleur

Ne vous fiez pas aux couleurs dans les captures d'écran, j'ai modifié des fichiers système par erreur mais ne parviens plus à les retrouver pour remettre à la normale. Oui, je suis un boulet :)

Contrôler son GUI avec le clavier, c'est un jeu d'enfant avec tkinter.

Vous vous souvenez lorsqu'on a associé des fonctions aux boutons ? Eh bien la démarche va être quasiment identique pour relier un raccourci clavier à une fonction.
De façon générale, cela se fait ainsi :

w.bind("<Key>", fonction)

On a ici "w" qui est le widget, "" qui est le code de la touche appuyée et enfin "fonction" qui est la fonction appelée.

Comment connaître le code ?

Ça peut être pratique c'est sûr. Pour ça, le plus simple reste à les essayer au lieu de lire toute la documentation. Essayez donc de lancer le code ci-dessous puis d'appuyer sur des touches :

#!/usr/bin/env python3.4
# -*- coding:Utf-8 -*- 
# print pressed key
from tkinter import *

def key(event):
    print(event.keysym)

w = Tk()
w.title("get key") 
w.bind("<Key>", key)
w.mainloop()

Ce petit bout de code va afficher la touche appuyée, dont la valeur sera à mettre à la place de pour utiliser cette touche.

Notez que la fonction appelée par ".bind" reçoit en argument l'évènement. Il faudra y penser lorsqu'on utilisera lambda.
Dans notre visionneuse, nous allons donc associer les flèches pour faire défiler les images, et la combinaison "ctrl-O" pour ouvrir une nouvelle image :

# Raccourcis clavier
w.bind("<Left>", lambda e: defile_img(img_widget, "prev"))
w.bind("<Right>", lambda e: defile_img(img_widget, "next"))
w.bind("<Control - o>", lambda e: chg_img(img_widget))

Et voilà !

Avec tous ces TP, vous avez dévantage de billes en poche pour vous amuser avec tkinter.
Cette fois, je dépose le code à cette adresse, avec quelques modifications supplémentaires si vous souhaitez améliorer cette visionneuse : http://git.yeuxdelibad.net/tkv

Bon code ;)