Un example d'utilisation de PyFltk

Mise à jour: 28 mars 2008
Version: 1.0
Author: Jean-Louis Bicquelet-Salaün
Location: http://jlbicquelet.free.fr
Copyright: (c)2008 Jean-Louis BICQUELET-SALAÜN

Utilisation de PyFltk

PyFltk est un tookit vraiment simple à installer et à utiliser. Ce toolkit est portable ausis bien sur windows que sur linux. Il est de plus extrèmement léger. Malheureusement, il n'existe pas beaucoup de documentation à ce sujet. Je vous propose quelques petits exemples d'utilisation de Pyfltk. J'espère que cela vous donnera des idées d'utilisation.

Exemples

flmega.py

Ce programme trouve sont utilité dans la convertion d'octets en KiloOctets, MegaOctets , Gigaoctets. C'est bête mais sous Unix on a de quoi se perdre avec les unités. C'est l'occasion de disposer d'un outil permettant de se donner une idée de l'échelle.

L'interface ressemble à ceci

L'essentiel du travail est réalisé par la méthode __init__ de la classe byte_convert_window.

Des widget Fl_Input et Fl_Output sont utilisés pour la saisie (Fl_Input) et pour l'affichage (Fl_Output).

Les boutons sont définis pour les actions à l'aide de Fl_Button et on accroche des fonctions de callback à l'aide de la fonction o.callback().

La fonction cb_about(self,ptr) montre comment créer et gérer une boite de dialogue.

cb_octet montre comment récupérer le contenu d'une zone de saisie et comment forcer le contenue d'un widget Fl_Output. Il faut remarquer que le contenu correspond à du texte. Il est donc necessaire de la caster à l'aide de float avant de pouvoir l'utiliser comme une valeur numérique.

from fltk import *
import sys

def two_digit(val):
   r='%.2f' % val
   return r

def four_digit(val):
   r='%.4f' % val
   return r

class byte_convert_window:
   """Dialog window for convetion beetween bytes, Ko, Mo, Go"""
   def __init__(self):
      window = Fl_Window(100,100,360,220)
      window.label(sys.argv[0])
      self.edit1= Fl_Input(80, 25, 220, 25, "Octects:")
      self.edit2= Fl_Output(80, 55, 220, 25, "Kilo:")
      self.edit3= Fl_Output(80, 85, 220, 25, "Mega:")
      self.edit4= Fl_Output(80, 115, 220, 25, "Giga:")

      o = Fl_Button(60, 170, 70, 25, "Octets")
      o.callback(self.cb_octet)
      o = Fl_Button(150, 170, 90, 25, "Au sujet de")
      o.callback(self.cb_about)
      o = Fl_Button(250, 170, 70, 25, "Quitter")
      o.callback(self.cb_quit)

      window.end()
      window.show(len(sys.argv), sys.argv)
      Fl.run()

#-----------------------------------------------------------
# définition d'une boite de dialogue
#-----------------------------------------------------------
   def cb_about_done(self,ptr):
      self.about.hide()

   def cb_about(self,ptr):
      self.about = Fl_Window(300,200,'au sujet de')
      o = Fl_Text_Display(20,20,260,120)
      buf=Fl_Text_Buffer()
      o.buffer(buf)
      buf.text("Byte to Ko/Mo/Go converter\n\nversion 1.0\nJean-Louis ")

      o = Fl_Return_Button(120, 160, 70, 25, "Done")
      o.callback(self.cb_about_done)
      self.about.show()
#-----------------------------------------------------------

   def cb_quit(self,ptr):
      """quit callback"""
      sys.exit(0)

   def cb_octet(self,ptr):
      """converts bytes to Ko, Mo, Go"""
      v=self.edit1.value()
      if v=='':
         return
      v2= two_digit(float(v) / 1024)
      self.edit2.value(v2)
      v2= two_digit(float(v2) / 1024)
      self.edit3.value(v2)
      v2= four_digit(float(v2) / 1024)
      self.edit4.value(v2)


dlg = byte_convert_window()

fljpeg.py

fljpeg vous montre comment afficher de plusieures manières un fichier jpeg. Le code pour réaliser l'affichage suivant

est:

 from fltk import *
import sys

class jpeg_window:
   """sample jpeg demo window example"""
   def __init__(self):
      window = Fl_Window(360,180)
      window.label(sys.argv[0])

      box= Fl_Box (10,20,60,60) # option 1
      jpg=Fl_JPEG_Image("ava.jpg");
      box.image(jpg);

      Fl_Box (80,20,120,60).image(Fl_JPEG_Image("pechemignon.jpg")); # option2

      o = Fl_Button(220, 20, 100, 25, "Quitter")
      o.callback(self.cb_quit)

      window.end()
      window.show(len(sys.argv), sys.argv)
      Fl.run()
#-----------------------------------------------------------


   def cb_quit(self,ptr):
      """quit callback"""
      sys.exit(0)

jpeg_window()

On peut crér une boite nommée et une image jpeg puis les associer (option 1) ou profiter des facilités de composition des langages orientés objets (option 2). Une utilisation intermédiaire de la composition est aussi possible. Tout dépend de vos besoins.

flconvert.py

Ce programme sert à convertir un fichier texte d'un format à un autre. La fonction de convertion n'a pas été implémentée, mais on pourrait très bien utiliser tkmef2html par exemple.

L'interface ressemble à ceci

On remarquera que je n'ai pas créé de classe pour l'application. Cet exemple montre l'utilisation de pyfltk sans objet, à l'aide uniquement de fonction. Ceci impose parfois, l'utilisation de variables globales. Une boite d'aide est fournie par la fonction cb_help. Elle utilise la variable globale help_dialog_ qui est initialisée au début du programme.

Une boite d'ornementation a été ajoutée (lignes box1 = Fl_Box(5,160,630,80) et box1.box(FL_ENGRAVED_FRAME)).

Un bouton est associé à une inputbox pour aider la selection de fichiers. La callback cb_browse1 ou cb_browse2 après selection, force la valeur de l'inputbox à l'aide de la fonction input1.value().

from fltk import *
import sys

global help_dialog_

def cb_quitter(ptr):
     return sys.exit(0)

def cb_convert(ptr):
    pass

def cb_browse1(ptr):
     newfile = fl_file_chooser("source file?", "*","test")
     if newfile != None:
        input1.value(newfile)

def cb_browse2(ptr):
     newfile = fl_file_chooser("destination file?", "*","test")
     if newfile != None:
        input2.value(newfile)

def cb_help(ptr):
        help_dialog_.value(
	"\n"
	"\n"
	"convert program help\n"
	"\n"
	"\n"

	"

Purpose

\n" "

The aim of this example is to show you how to use pyfltk to convert\n" "your files from a format to an other, using an gui interface.

\n" "

This version is Copyright 2009 by Jean-Louis BICQUELET

\n" "\n" ) help_dialog_.show() # make the windows def make_window(): global input1 global input2 # main windows win = Fl_Double_Window(640, 280) box1 = Fl_Box(5,160,630,80) box1.box(FL_ENGRAVED_FRAME) input1 = Fl_Input(110, 35, 420, 30, "source file"); but1 = Fl_Button(540, 35, 75, 25, "browse..") but1.callback(cb_browse1) input2 = Fl_Input(110, 70, 420, 30, "destination file"); but2 = Fl_Button(540, 70, 75, 25, "browse..") but2.callback(cb_browse2) # command box but3 = Fl_Button(520, 180, 75, 25, "quit") but3.callback(cb_quitter) but4 = Fl_Button(435, 180, 75, 25, "about..") but4.callback(cb_help) but5 = Fl_Button(345, 180, 75, 25, "convert") but5.callback(cb_convert) return win # run the application help_dialog_ = Fl_Help_Dialog() win=make_window() win.show(len(sys.argv), sys.argv) Fl.run()

Téléchargement

Description date script
Convertion des octets en Ko,Mo,Go 26/10/2006 flmega.py
Affichage d'images jpeg 28/03/2008 fljpeg.zip
Convertion de fichiers texte 06/04/2009 flconvert.py