Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati


Guida verificata con Ubuntu: 20.04 22.04

Problemi in questa pagina? Segnalali in questa discussione

Introduzione

Glade è un potente strumento RAD (Rapid Application Development) per la creazione semplice e veloce di interfacce in modo WYSIWYG del toolkit GTK+ 3 e per il desktop GNOME.

Le interfacce disegnate con Glade vengono salvate in file XML che possono essere usati con molti linguaggi, fra cui C, C++, C#, Vala, Java, Perl, Python e altri.

Inizialmente la libreria libglade permetteva di leggere questi file dinamicamente (cioè in fase di esecuzione). GtkBuilder (incluso in GTK) ora sostituisce libglade.

Glade al momento non supporta GTK 4, ma dal 2021 è in sviluppo un nuovo software per GTK 4 chiamato Cambalache.

Installazione

Sono disponibili tre modalitàità di installazione:

File d'esempio

Di seguito il contenuto di un file exemple.glade, il quale descrive una semplice finestra con un testo scritto al centro e un pulsante in basso:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.2 -->
<interface>
  <requires lib="gtk+" version="3.0"/>
  <object class="GtkWindow" id="window1">
    <property name="width_request">300</property>
    <property name="height_request">100</property>
    <property name="can_focus">False</property>
    <signal name="destroy" handler="onDestroy" swapped="no"/>
    <child type="titlebar">
      <placeholder/>
    </child>
    <child>
      <object class="GtkBox">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="orientation">vertical</property>
        <child>
          <object class="GtkLabel" id="label1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes">Glade è tuo amico</property>
          </object>
          <packing>
            <property name="expand">True</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkButton" id="button1">
            <property name="label" translatable="yes">Cliccami</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <signal name="clicked" handler="onButtonClicked" swapped="no"/>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

Questo file verrà utilizzato come esempio di partenza per i prossimi esercizi, quindi può essere salvato in una cartella a piacere, insieme ad altri file con il codice necessario per i successivi esercizi.

Glade con Python

Verrà utilizzato PyGObject (incluso in Ubuntu 18.04 e successivi), un modulo che consente di accedere a librerie basate su GObject (come GTK+ 3) all'interno di Python.

Visualizzare una GUI

Per caricare il file è necessario un oggetto GtkBuilder:

builder = Gtk.Builder()
builder.add_from_file("example.glade")

La seconda riga carica tutti gli oggetti definiti in example.glade nell'oggetto builder.

Per accedere agli oggetti va usata la funzione builder.get_object. Ad esempio, per l'oggetto window1:

window = builder.get_object("window1")

Gestire i segnali

La gestione dei segnali non necessita di codice particolare, poiché può essere programmata con Glade, come mostra la seguente immagine:

Per far sì che i segnali vengano gestiti correttamente, è necessario creare tutte le funzioni collegate e chiamare la funzione connect_signals.

Nel file .glade, è presente un segnale per chiudere la finestra e uno per cliccare sul pulsante:

<signal name="destroy" handler="onDestroy" swapped="no"/>
...
<signal name="clicked" handler="onButtonClicked" swapped="no"/>

Quindi bisogna creare le funzioni onDestroy e onButtonClicked all'interno di una classe Handler:

class Handler:
    def onDestroy(self, *args):
        Gtk.main_quit()

    def onButtonClicked(self, widget):
        # contenuto della funzione

Di seguito il codice completo:

   1 #!/usr/bin/python
   2 import gi
   3 
   4 gi.require_version("Gtk", "3.0")
   5 from gi.repository import Gtk
   6 
   7 class Handler:
   8     def onDestroy(self, *args):
   9         # Chiudi il programma
  10         Gtk.main_quit()
  11 
  12     def onButtonClicked(self, widget):
  13         # Visualizza un messaggio con un testo in una finestra
  14         dialog = Gtk.MessageDialog(
  15             transient_for=window,
  16             flags=0,
  17             message_type=Gtk.MessageType.INFO,
  18             buttons=Gtk.ButtonsType.CLOSE,
  19             text="Hello World!"
  20         )
  21         dialog.run()
  22         dialog.destroy()
  23 
  24 builder = Gtk.Builder()
  25 # Carica il file glade
  26 builder.add_from_file("example.glade")
  27 # Connetti i segnali alle funzioni
  28 builder.connect_signals(Handler())
  29 # Accede all'oggetto window1
  30 window = builder.get_object("window1")
  31 # Visualizza la finestra
  32 window.show_all()
  33 # Attendi fino a quando la finestra non viene chiusa
  34 Gtk.main()

Ulteriori risorse


CategoryProgrammazione