SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Linux Day 2007
                 by



    Loris Michielutti aka Orcim



            PyGtk
come creare applicazioni
           grafiche
in modo semplice e veloce.
perche'   PyGtk
             perche' e' un Free Software   (LGPL license)

                       libero di essere:
                                 usato
                          modificato
                          distribuito
                            studiato


by   Orcim
un accenno alle   LGPL
        La licenza LGPL stabilisce il copyleft sul singolo
        file di codice sorgente non sull'intero software.
              Questo ci permette di includere liberamente
             parti di applicazioni commerciali (closed-source)
                            in un software libero.
                In altre parole ci permette di rendere
                   compatibili programmi liberi e non.




by   Orcim
Applicazione con pyGtk
             una applicazione che usa una interfaccia grafica
                          comunemente chiamata
                      GUI (Graphics User Interface)
             prevede in pyGtk normalmente la seguente
                                Struttura:
             - l'importazione delle librerie necessarie
             - la creazione della finestra principale
             - la creazione di un packing dove inserire i vari widgets
             - la connessione dei widgets ai relativi signal handlers
             - l'inserimento del packing nella finestra principale
             - l'abilitazione della visualizzazione dei widgets
             - l'avvio della procedura principale.


by   Orcim
vediamo alcune   Terminologie
             che useremo nel corso della presentazione


             - Widgets          (oggetti)
             - Packing          (impacchettamento)
             - Signals          (segnali)
             - Handlers         (gestione segnali)
             - Callbacks        (procedure)
             - Events           (eventi)


by   Orcim
Widget (oggetto)
                in generale si intende un qualsiasi oggetto
             incluso nelle finestre:
             es:
             Menus, Toolbar, Text view, Status bar, etc.




by   Orcim
Packing (impacchettamento)
               e' un contenitore che gestisce l' ordinamento
             degli oggetti al suo interno.
               un packing puo' contenere altri packing per
             gestire aree suddivise.
             esempi di packing:
             horizontal Box, vertical Box, Tables, etc.




by   Orcim
Signal (segnale)
               e' un messaggio che viene emesso da un
             oggetto quando esegue qualcosa
             es:
             clicked, destroy, toggled, etc.




by   Orcim
Handlers (gestore segnali)


                sono quelle funzioni che attendono di
             identificare un segnale...


               Signal          Handlers




by   Orcim
Handlers (gestore segnali)


             per avviarne il metodo ad esso associato.



                            Handlers          Callback




by   Orcim
Callbacks (procedure)

               sono le funzioni che vengono eseguite dal
             gestore in risposta al segnale ricevuto.




               Signal         Handlers          Callback




by   Orcim
Event (evento)
               e' un segnale NON generato da un Widget
             es:
               destroy_event, focus_in_event,
             key_press_event, etc..




by   Orcim
Analizziamo la nostra prima Applicazione:

 file: miaApplicazione.py
 #/usr/bin/env python
 # -*- coding: utf-8 -*-
 """     multistringa di documentazione
     Class: MyWindow
     Metod:
       rev: 070928
 """
 import gobject
 import gtk
 import pango

 #---------------------------------------------------------------------
 class MyWindow(object):
 #---------------------------------------------------------------------
      def __init__(self):
      #
      # Attributs
          self.myFlg=True
      #
      # Window
          self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)
          self.win.set_title("La mia prima applicazione")
          self.win.set_border_width(4)
by Orcim self.win.set_default_size(320,40)
Importiamo le Librerie:


 #/usr/bin/env python
 # -*- coding: utf-8 -*-
 """     multistringa di documentazione
     Class: MyWindow
     Metod:
       rev: 070928
 """
 import gobject
 import gtk
 import pango

 #--------------------------------------------------------------------
 class MyWindow(object):
 #--------------------------------------------------------------------
      def __init__(self):
      #
      # Attributs
          self.myFlg=True
      #
      # Window
          self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)
          self.win.set_title("La mia prima applicazione")
          self.win.set_border_width(4)
by Orcim self.win.set_default_size(320,40)
Istanziamo l'oggetto principale la Window:
 #/usr/bin/env python
 # -*- coding: utf-8 -*-
 """     multistringa di documentazione
     Class: MyWindow
     Metod:
       rev: 070928
 """
 import gobject
 import gtk
 import pango

 #--------------------------------------------------------------------
 class MyWindow(object):
 #--------------------------------------------------------------------
     def __init__(self):
     #
     # Attributs
         self.myFlg=True
     #
     # Window
         self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)
         self.win.set_title("La mia prima applicazione")
         self.win.set_border_width(4)
         self.win.set_default_size(320,40)

         # Signals
by Orcim self.win.connect("destroy", self.on_destroy)
Associamo i Segnali alle Callbacks:
 import gobject
 import gtk
 import pango
 #--------------------------------------------------------------------
 class MyWindow(object):
 #--------------------------------------------------------------------
     def __init__(self):
     #
     # Attributs
         self.myFlg=True
     #
     # Window
         self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)
         self.win.set_title("La mia prima applicazione")
         self.win.set_border_width(4)
         self.win.set_default_size(320,40)

         # Signals
         self.win.connect("destroy", self.on_destroy)
         self.win.connect("delete_event", self.on_delete_event)
         self.win.connect("hide", self.on_hide)

      #
      # Vbox
          # istanzio una vertical box
          #gtk.VBox(homogeneous=False, spacing=0)
by Orcim self.vbox = gtk.VBox(False, 0)
Mettiamo ordine nei widgets Packing:
 #
 # Window
     self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)
     self.win.set_title("La mia prima applicazione")
     self.win.set_border_width(4)
     self.win.set_default_size(320,40)
     # Signals
     self.win.connect("destroy", self.on_destroy)
     self.win.connect("delete_event", self.on_delete_event)
     self.win.connect("hide", self.on_hide)

 #
 # Vbox
     # istanzio un vertical box
     #gtk.VBox(homogeneous=False, spacing=0)
     self.vbox = gtk.VBox(False, 0)

 #
 # Label
     self.lab = gtk.Label("<b><big>myFlg: %s</big></b>" %self.myFlg)
     self.lab.set_use_markup(True)
     # gli oggetti che non hanno associata una windows non possono
     # esser modificati come background
     self.lab.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("blue"))
 #
 # EventBox
by Orcim
     self.evb = gtk.EventBox()
Includiamo dei Widgets:
   #
   # Vbox
       # istanzio un vertical box
       #gtk.VBox(homogeneous=False, spacing=0)
       self.vbox = gtk.VBox(False, 0)

   #
   # Label
       self.lab = gtk.Label("<b><big>myFlg: %s</big></b>" %self.myFlg)
       self.lab.set_use_markup(True)
       # gli oggetti che non hanno associata una windows non possono
       # esser modificati come background
       self.lab.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("blue"))
   #
   # EventBox
       self.evb = gtk.EventBox()
       self.evb.add(self.lab)
       self.evb.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse("green"))
       # Signals
       self.evb.connect("button-release-event", self.on_clicked)
       #def pack_start(child, expand=True, fill=True, padding=0)
       self.vbox.pack_start(self.evb, False, False, 0)

    #
    # View
         self.win.add(self.vbox)
by Orcim self.win.show_all()
Rendiamo visibili gli Oggetti:
   #
   # EventBox
       self.evb = gtk.EventBox()
       self.evb.add(self.lab)
       self.evb.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse("green"))
       # Signals
       self.evb.connect("button-release-event", self.on_clicked)
       #def pack_start(child, expand=True, fill=True, padding=0)
       self.vbox.pack_start(self.evb, False, False, 0)

   #
   # View
       self.win.add(self.vbox)
       self.win.show_all()

    #--------------------------------------------------------------------
    # signal
    #--------------------------------------------------------------------
    #
    # Window
    def on_delete_event(self, widget, data=None):
         print "on_delete_event"
         return self.myFlg
    def on_hide(self, widget, data=None):
         print "on_hide"
    def on_destroy(self, widget, data=None):
         print "on_destroy"
by Orcim gtk.main_quit()
Definiamo le Callbacks: assiociate alla Window
   #
   # View
       self.win.add(self.vbox)
       self.win.show_all()
   #-----------------------------------------------------------------
   # signal
   #-----------------------------------------------------------------
   #

   # Window
   def on_delete_event(self, widget, data=None):
       print "on_delete_event"
       return self.myFlg
   def on_hide(self, widget, data=None):
       print "on_hide"
   def on_destroy(self, widget, data=None):
       print "on_destroy"
       gtk.main_quit()

    #
    # EventBox
    def on_clicked(self, widget, data=None):
         print "on_clicked"
         if self.myFlg:
             self.myFlg = False
         else:
by Orcim     self.myFlg = True
Definiamo le Callbacks: assiociate all' EventBox
      # Window
      def on_delete_event(self, widget, data=None):
          print "on_delete_event"
          return self.myFlg
      def on_hide(self, widget, data=None):
          print "on_hide"
      def on_destroy(self, widget, data=None):
          print "on_destroy"
          gtk.main_quit()

      #
      # EventBox
      def on_clicked(self, widget, data=None):
           print "on_clicked"
           if self.myFlg:
               self.myFlg = False
           else:
               self.myFlg = True
          msg="<b><big>Flag di ritorno: %s</big></b>" %self.myFlg
           self.lab.set_text(msg)
           self.lab.set_use_markup(True)

#---------------------------------------------------------------------
if __name__ == "__main__":
    # istanzio l'oggetto
    MyWindow()
by   Orcim
Definiamo lo Scripts:
       #
       # EventBox
       def on_clicked(self, widget, data=None):
            print "on_clicked"
            if self.myFlg:
                self.myFlg = False
            else:
                self.myFlg = True
           msg="<b><big>Flag di ritorno: %s</big></b>" %self.myFlg
            self.lab.set_text(msg)
            self.lab.set_use_markup(True)

 #--------------------------------------------------------------------
 if __name__ == "__main__":
     # istanzio l'oggetto
     MyWindow()
     # avvio l'applicazione
     gtk.main()




by   Orcim
Avviamo lo Scripts:
 $ miaApplicazione.py [ENTER]
             o
 $ python miaApplicazione.py [ENTER]

 a seconda se abbiate definito o meno nel path dove si trova l'interprete.




by   Orcim
PyGtk

          Loris Michielutti aka Orcim



              Link utili:
http://www.pygtk.org/
http://live.gnome.org/PyGTK/FAQ

             Domande ?

Mais conteúdo relacionado

Semelhante a 2007 Py05 gtk

GUI in Gtk+ con Glade & Anjuta
GUI in Gtk+ con Glade & AnjutaGUI in Gtk+ con Glade & Anjuta
GUI in Gtk+ con Glade & Anjutadelfinostefano
 
High specialized vm on open stack cloud
High specialized vm on open stack cloudHigh specialized vm on open stack cloud
High specialized vm on open stack cloudGabriele Baldoni
 
Docker vs Virtualizzazioni
Docker vs VirtualizzazioniDocker vs Virtualizzazioni
Docker vs VirtualizzazioniGiuliano Latini
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIvan Gualandri
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
 
Sviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I OsSviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I OsNoDelay Software
 
Csp@scuola smarttv corso1
Csp@scuola smarttv corso1Csp@scuola smarttv corso1
Csp@scuola smarttv corso1CSP Scarl
 
Distribuire una libreria Java per usarla come dipendenza gradle
Distribuire una libreria Java per usarla come dipendenza gradleDistribuire una libreria Java per usarla come dipendenza gradle
Distribuire una libreria Java per usarla come dipendenza gradlePaolo Montalto
 
Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015Todi Appy Days
 
Wearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple WatchWearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple WatchPaolo Musolino
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationTiziano Serritella
 
Javascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerJavascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerMatteo Magni
 
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiMarco Gasparetto
 
KDE Plasma widgets
KDE Plasma widgetsKDE Plasma widgets
KDE Plasma widgetsPietro Lerro
 
jQuery - 1 | WebMaster & WebDesigner
jQuery - 1 | WebMaster & WebDesignerjQuery - 1 | WebMaster & WebDesigner
jQuery - 1 | WebMaster & WebDesignerMatteo Magni
 
Qt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiQt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiPaolo Sereno
 

Semelhante a 2007 Py05 gtk (20)

GUI in Gtk+ con Glade & Anjuta
GUI in Gtk+ con Glade & AnjutaGUI in Gtk+ con Glade & Anjuta
GUI in Gtk+ con Glade & Anjuta
 
High specialized vm on open stack cloud
High specialized vm on open stack cloudHigh specialized vm on open stack cloud
High specialized vm on open stack cloud
 
VS Package @ CD2008
VS Package @ CD2008VS Package @ CD2008
VS Package @ CD2008
 
XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13
 
Docker vs Virtualizzazioni
Docker vs VirtualizzazioniDocker vs Virtualizzazioni
Docker vs Virtualizzazioni
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulug
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
 
Sviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I OsSviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I Os
 
#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2
 
Csp@scuola smarttv corso1
Csp@scuola smarttv corso1Csp@scuola smarttv corso1
Csp@scuola smarttv corso1
 
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
 
Distribuire una libreria Java per usarla come dipendenza gradle
Distribuire una libreria Java per usarla come dipendenza gradleDistribuire una libreria Java per usarla come dipendenza gradle
Distribuire una libreria Java per usarla come dipendenza gradle
 
Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015
 
Wearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple WatchWearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple Watch
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automation
 
Javascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerJavascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesigner
 
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessi
 
KDE Plasma widgets
KDE Plasma widgetsKDE Plasma widgets
KDE Plasma widgets
 
jQuery - 1 | WebMaster & WebDesigner
jQuery - 1 | WebMaster & WebDesignerjQuery - 1 | WebMaster & WebDesigner
jQuery - 1 | WebMaster & WebDesigner
 
Qt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiQt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immagini
 

2007 Py05 gtk

  • 1. Linux Day 2007 by Loris Michielutti aka Orcim PyGtk come creare applicazioni grafiche in modo semplice e veloce.
  • 2. perche' PyGtk perche' e' un Free Software (LGPL license) libero di essere: usato modificato distribuito studiato by Orcim
  • 3. un accenno alle LGPL La licenza LGPL stabilisce il copyleft sul singolo file di codice sorgente non sull'intero software. Questo ci permette di includere liberamente parti di applicazioni commerciali (closed-source) in un software libero. In altre parole ci permette di rendere compatibili programmi liberi e non. by Orcim
  • 4. Applicazione con pyGtk una applicazione che usa una interfaccia grafica comunemente chiamata GUI (Graphics User Interface) prevede in pyGtk normalmente la seguente Struttura: - l'importazione delle librerie necessarie - la creazione della finestra principale - la creazione di un packing dove inserire i vari widgets - la connessione dei widgets ai relativi signal handlers - l'inserimento del packing nella finestra principale - l'abilitazione della visualizzazione dei widgets - l'avvio della procedura principale. by Orcim
  • 5. vediamo alcune Terminologie che useremo nel corso della presentazione - Widgets (oggetti) - Packing (impacchettamento) - Signals (segnali) - Handlers (gestione segnali) - Callbacks (procedure) - Events (eventi) by Orcim
  • 6. Widget (oggetto) in generale si intende un qualsiasi oggetto incluso nelle finestre: es: Menus, Toolbar, Text view, Status bar, etc. by Orcim
  • 7. Packing (impacchettamento) e' un contenitore che gestisce l' ordinamento degli oggetti al suo interno. un packing puo' contenere altri packing per gestire aree suddivise. esempi di packing: horizontal Box, vertical Box, Tables, etc. by Orcim
  • 8. Signal (segnale) e' un messaggio che viene emesso da un oggetto quando esegue qualcosa es: clicked, destroy, toggled, etc. by Orcim
  • 9. Handlers (gestore segnali) sono quelle funzioni che attendono di identificare un segnale... Signal Handlers by Orcim
  • 10. Handlers (gestore segnali) per avviarne il metodo ad esso associato. Handlers Callback by Orcim
  • 11. Callbacks (procedure) sono le funzioni che vengono eseguite dal gestore in risposta al segnale ricevuto. Signal Handlers Callback by Orcim
  • 12. Event (evento) e' un segnale NON generato da un Widget es: destroy_event, focus_in_event, key_press_event, etc.. by Orcim
  • 13. Analizziamo la nostra prima Applicazione: file: miaApplicazione.py #/usr/bin/env python # -*- coding: utf-8 -*- """ multistringa di documentazione Class: MyWindow Metod: rev: 070928 """ import gobject import gtk import pango #--------------------------------------------------------------------- class MyWindow(object): #--------------------------------------------------------------------- def __init__(self): # # Attributs self.myFlg=True # # Window self.win = gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.set_title("La mia prima applicazione") self.win.set_border_width(4) by Orcim self.win.set_default_size(320,40)
  • 14. Importiamo le Librerie: #/usr/bin/env python # -*- coding: utf-8 -*- """ multistringa di documentazione Class: MyWindow Metod: rev: 070928 """ import gobject import gtk import pango #-------------------------------------------------------------------- class MyWindow(object): #-------------------------------------------------------------------- def __init__(self): # # Attributs self.myFlg=True # # Window self.win = gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.set_title("La mia prima applicazione") self.win.set_border_width(4) by Orcim self.win.set_default_size(320,40)
  • 15. Istanziamo l'oggetto principale la Window: #/usr/bin/env python # -*- coding: utf-8 -*- """ multistringa di documentazione Class: MyWindow Metod: rev: 070928 """ import gobject import gtk import pango #-------------------------------------------------------------------- class MyWindow(object): #-------------------------------------------------------------------- def __init__(self): # # Attributs self.myFlg=True # # Window self.win = gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.set_title("La mia prima applicazione") self.win.set_border_width(4) self.win.set_default_size(320,40) # Signals by Orcim self.win.connect("destroy", self.on_destroy)
  • 16. Associamo i Segnali alle Callbacks: import gobject import gtk import pango #-------------------------------------------------------------------- class MyWindow(object): #-------------------------------------------------------------------- def __init__(self): # # Attributs self.myFlg=True # # Window self.win = gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.set_title("La mia prima applicazione") self.win.set_border_width(4) self.win.set_default_size(320,40) # Signals self.win.connect("destroy", self.on_destroy) self.win.connect("delete_event", self.on_delete_event) self.win.connect("hide", self.on_hide) # # Vbox # istanzio una vertical box #gtk.VBox(homogeneous=False, spacing=0) by Orcim self.vbox = gtk.VBox(False, 0)
  • 17. Mettiamo ordine nei widgets Packing: # # Window self.win = gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.set_title("La mia prima applicazione") self.win.set_border_width(4) self.win.set_default_size(320,40) # Signals self.win.connect("destroy", self.on_destroy) self.win.connect("delete_event", self.on_delete_event) self.win.connect("hide", self.on_hide) # # Vbox # istanzio un vertical box #gtk.VBox(homogeneous=False, spacing=0) self.vbox = gtk.VBox(False, 0) # # Label self.lab = gtk.Label("<b><big>myFlg: %s</big></b>" %self.myFlg) self.lab.set_use_markup(True) # gli oggetti che non hanno associata una windows non possono # esser modificati come background self.lab.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("blue")) # # EventBox by Orcim self.evb = gtk.EventBox()
  • 18. Includiamo dei Widgets: # # Vbox # istanzio un vertical box #gtk.VBox(homogeneous=False, spacing=0) self.vbox = gtk.VBox(False, 0) # # Label self.lab = gtk.Label("<b><big>myFlg: %s</big></b>" %self.myFlg) self.lab.set_use_markup(True) # gli oggetti che non hanno associata una windows non possono # esser modificati come background self.lab.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("blue")) # # EventBox self.evb = gtk.EventBox() self.evb.add(self.lab) self.evb.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse("green")) # Signals self.evb.connect("button-release-event", self.on_clicked) #def pack_start(child, expand=True, fill=True, padding=0) self.vbox.pack_start(self.evb, False, False, 0) # # View self.win.add(self.vbox) by Orcim self.win.show_all()
  • 19. Rendiamo visibili gli Oggetti: # # EventBox self.evb = gtk.EventBox() self.evb.add(self.lab) self.evb.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse("green")) # Signals self.evb.connect("button-release-event", self.on_clicked) #def pack_start(child, expand=True, fill=True, padding=0) self.vbox.pack_start(self.evb, False, False, 0) # # View self.win.add(self.vbox) self.win.show_all() #-------------------------------------------------------------------- # signal #-------------------------------------------------------------------- # # Window def on_delete_event(self, widget, data=None): print "on_delete_event" return self.myFlg def on_hide(self, widget, data=None): print "on_hide" def on_destroy(self, widget, data=None): print "on_destroy" by Orcim gtk.main_quit()
  • 20. Definiamo le Callbacks: assiociate alla Window # # View self.win.add(self.vbox) self.win.show_all() #----------------------------------------------------------------- # signal #----------------------------------------------------------------- # # Window def on_delete_event(self, widget, data=None): print "on_delete_event" return self.myFlg def on_hide(self, widget, data=None): print "on_hide" def on_destroy(self, widget, data=None): print "on_destroy" gtk.main_quit() # # EventBox def on_clicked(self, widget, data=None): print "on_clicked" if self.myFlg: self.myFlg = False else: by Orcim self.myFlg = True
  • 21. Definiamo le Callbacks: assiociate all' EventBox # Window def on_delete_event(self, widget, data=None): print "on_delete_event" return self.myFlg def on_hide(self, widget, data=None): print "on_hide" def on_destroy(self, widget, data=None): print "on_destroy" gtk.main_quit() # # EventBox def on_clicked(self, widget, data=None): print "on_clicked" if self.myFlg: self.myFlg = False else: self.myFlg = True msg="<b><big>Flag di ritorno: %s</big></b>" %self.myFlg self.lab.set_text(msg) self.lab.set_use_markup(True) #--------------------------------------------------------------------- if __name__ == "__main__": # istanzio l'oggetto MyWindow() by Orcim
  • 22. Definiamo lo Scripts: # # EventBox def on_clicked(self, widget, data=None): print "on_clicked" if self.myFlg: self.myFlg = False else: self.myFlg = True msg="<b><big>Flag di ritorno: %s</big></b>" %self.myFlg self.lab.set_text(msg) self.lab.set_use_markup(True) #-------------------------------------------------------------------- if __name__ == "__main__": # istanzio l'oggetto MyWindow() # avvio l'applicazione gtk.main() by Orcim
  • 23. Avviamo lo Scripts: $ miaApplicazione.py [ENTER] o $ python miaApplicazione.py [ENTER] a seconda se abbiate definito o meno nel path dove si trova l'interprete. by Orcim
  • 24. PyGtk Loris Michielutti aka Orcim Link utili: http://www.pygtk.org/ http://live.gnome.org/PyGTK/FAQ Domande ?