Blame platform-demos/gl/toolbar_builder.py.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:xi="http://www.w3.org/2001/XInclude" type="guide" style="task" id="toolbar_builder.py" xml:lang="gl">
Packit 1470ea
  <info>
Packit 1470ea
    <title type="text">Toolbar created using Glade (Python)</title>
Packit 1470ea
    <link type="guide" xref="beginner.py#menu-combo-toolbar"/>
Packit 1470ea
    <link type="seealso" xref="toolbar.py"/>
Packit 1470ea
    <link type="seealso" xref="grid.py"/>
Packit 1470ea
    <link type="next" xref="menubar.py"/>
Packit 1470ea
    <revision version="0.1" date="2012-07-17" status="draft"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Tiffany Antopolski</name>
Packit 1470ea
      <email its:translate="no">tiffany.antopolski@gmail.com</email>
Packit 1470ea
      <years>2012</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright edit">
Packit 1470ea
      <name>Marta Maria Casetti</name>
Packit 1470ea
      <email its:translate="no">mmcasetti@gmail.com</email>
Packit 1470ea
      <years>2012</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Sebastian Pölsterl</name>
Packit 1470ea
      <email its:translate="no">sebp@k-d-w.org</email>
Packit 1470ea
      <years>2011</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <desc>Unha barra de botóns e outros widgets</desc>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Fran Dieguez</mal:name>
Packit 1470ea
      <mal:email>frandieguez@gnome.org</mal:email>
Packit 1470ea
      <mal:years>2012-2013.</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>Barra de ferramentas creada empregando Glade</title>
Packit 1470ea
Packit 1470ea
  <media type="image" mime="image/png" src="media/toolbar.png"/>
Packit 1470ea
  

Este exemplo é similar a <link xref="toolbar.py"/>, agás que usa Glade para crear a barra de ferrametnas nun ficheiro .ui XML.

Packit 1470ea
Packit 1470ea
<links type="sections"/>
Packit 1470ea
Packit 1470ea
<section id="glade">
Packit 1470ea
<title>Crear unha barra de ferramentas con Glade</title>
Packit 1470ea
  

Packit 1470ea
  To create the toolbar using the <link href="http://glade.gnome.org/">Glade Interface Designer</link>:
Packit 1470ea
  

Packit 1470ea
  <steps>
Packit 1470ea
    <item>

Open Glade, and save the file as <file>toolbar_builder.ui</file>

Packit 1470ea
          

<media type="image" src="media/glade_ui.png" width="900">

Packit 1470ea
              Screenshot of Glade ui
Packit 1470ea
           </media>

Packit 1470ea
    </item>
Packit 1470ea
Packit 1470ea
    <item>

Under <gui>Containers</gui> on the left hand side, right click on the toolbar icon and select <gui>Add widget as toplevel</gui>.

Packit 1470ea
          

<media type="image" src="media/glade_select_toolbar.png">

Packit 1470ea
           Screenshot of toolbar icon in Glade ui
Packit 1470ea
          </media>

Packit 1470ea
    </item>
Packit 1470ea
Packit 1470ea
    <item>

Under the <gui>General</gui> tab on the bottom right, change the <gui>Name</gui> to <input>toolbar</input> and <gui>Show Arrow</gui> to <gui>No</gui>.

Packit 1470ea
          

<media type="image" src="media/glade_toolbar_general.png">

Packit 1470ea
             Screenshot of General tab
Packit 1470ea
          </media>

Packit 1470ea
    </item>
Packit 1470ea
Packit 1470ea
    <item>

Under the <gui>Common</gui> tab, set <gui>Horizontal Expand</gui> to <gui>Yes</gui>.

Packit 1470ea
         

<media type="image" src="media/glade_toolbar_common.png">

Packit 1470ea
              Screenshot of Common tab
Packit 1470ea
          </media>

Packit 1470ea
     </item>
Packit 1470ea
Packit 1470ea
     <item>

Prema co botón dereito sobre a barra de ferramentas na parte superior dereita e seleccione <gui>Editar</gui>. A xanela <gui>Editor da barra de ferramentas</gui> aparecerá.

Packit 1470ea
         

<media type="image" src="media/glade_toolbar_edit.png">

Packit 1470ea
             Screenshot of where to right click to edit toolbar.
Packit 1470ea
          </media>

Packit 1470ea
   </item>
Packit 1470ea
Packit 1470ea
   <item>

Queremos engadir 5 ToolButtons: Novo, Abrir, Desfacer, Pantalla completa e Saír da pantalla completa. Primeiro, precisamos engadir o ToolButton Novo.

Packit 1470ea
     <steps>
Packit 1470ea
       <item>

Baixo a lapela <gui>Xerarquía</gui>, prema <gui>Engadir</gui>.

</item>
Packit 1470ea
       <item>

Cambie o nome do TollItem a <input>new_button</input>.

</item>
Packit 1470ea
       <item>

Scroll down and set <gui>Is important</gui> to <gui>Yes</gui>. This will cause the label of the ToolButton to be shown, when you view the toolbar.

</item>
Packit 1470ea
       <item>

Escriba o <gui>nome da acción</gui>: <input>app.new</input>.

</item>
Packit 1470ea
       <item>

Cambie a <gui>Etiqueta</gui> a <input>Nova</input>.

</item>
Packit 1470ea
       <item>

Seleccione o Id de inventario <gui>New</gui> desde o menú despregábel, ou o tipo <input>gtk-new</input>.

</item>
Packit 1470ea
     </steps>
Packit 1470ea
     

Repita os pasos de arriba cos TollButtons que faltan, coas seguintes propiedades:

Packit 1470ea
  
Packit 1470ea
    
Packit 1470ea
      
Packit 1470ea
        

Nome

Packit 1470ea
        

É importante

Packit 1470ea
        

Action name

Packit 1470ea
        

Etiqueta

Packit 1470ea
        

ID de inventario

Packit 1470ea
      
Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
      

open_button

Packit 1470ea
      

Si

Packit 1470ea
      

app.open

Packit 1470ea
      

Open

Packit 1470ea
      

gtk-open

Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
      

undo_button

Packit 1470ea
      

Si

Packit 1470ea
      

win.undo

Packit 1470ea
      

Desfacer

Packit 1470ea
      

gtk-undo

Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
      

fullscreen_button

Packit 1470ea
      

Si

Packit 1470ea
      

win.fullscreen

Packit 1470ea
      

Pantalla completa

Packit 1470ea
      

gtk-fullscreen

Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
      

leave_fullscreen_button

Packit 1470ea
      

Si

Packit 1470ea
      

win.fullscreen

Packit 1470ea
      

Saír do modo de pantalla completa

Packit 1470ea
      

gtk-leave-fullscreen

Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
Packit 1470ea
          <media type="image" src="media/glade_toolbar_editor.png">
Packit 1470ea
Packit 1470ea
          </media>
Packit 1470ea
    </item>
Packit 1470ea
Packit 1470ea
    <item>

Pechar o <gui>Editor de barra de ferramentas</gui>.

Packit 1470ea
   </item>
Packit 1470ea
Packit 1470ea
   <item>

When our program will first start, we do not want the <gui>Leave Fullscreen</gui> ToolButton to be visible, since the application will not be in fullscreen mode. You can set this in the <gui>Common</gui> tab, by clicking the <gui>Visible</gui> property to <gui>No</gui>. The ToolButton will still appear in the interface designer, but will behave correctly when the file is loaded into your program code. Note that the method show_all() would override this setting - so in the code we have to use show() separately on all the elements.

Packit 1470ea
          

<media type="image" src="media/glade_visible_no.png">

Packit 1470ea
                 Setting the visible property to No
Packit 1470ea
          </media>

Packit 1470ea
   </item>
Packit 1470ea
Packit 1470ea
    <item>

Garde o seu traballo e saia de Glade.

Packit 1470ea
   </item>
Packit 1470ea
Packit 1470ea
   <item>

The XML file created by Glade is shown below. This is the description of the toolbar. At the time of this writing, the option to add the class Gtk.STYLE_CLASS_PRIMARY_TOOLBAR in the Glade Interface did not exist. We can manually add this to the XML file. To do this, add the following XML code at line 9 of <file>toolbar_builder.ui</file>:

Packit 1470ea
   
Packit 1470ea
  <style>
Packit 1470ea
     <class name="primary-toolbar"/>
Packit 1470ea
  </style>
Packit 1470ea
  ]]>
Packit 1470ea
  

Se non engade isto, o programa funcionará igual. Porén barra de ferramentas resultante semellará un pouco diferente á captura de pantalla da parte superior desta páxina.

Packit 1470ea
   </item>
Packit 1470ea
</steps>
Packit 1470ea
  <?xml version="1.0" encoding="UTF-8"?>
Packit 1470ea
<interface>
Packit 1470ea
  <!-- interface-requires gtk+ 3.0 -->
Packit 1470ea
  <object class="GtkToolbar" id="toolbar">
Packit 1470ea
    <property name="visible">True</property>
Packit 1470ea
    <property name="can_focus">False</property>
Packit 1470ea
    <property name="hexpand">True</property>
Packit 1470ea
    <property name="show_arrow">False</property>
Packit 1470ea
    <child>
Packit 1470ea
      <object class="GtkToolButton" id="new_button">
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="visible">True</property>
Packit 1470ea
        <property name="can_focus">False</property>
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="is_important">True</property>
Packit 1470ea
        <property name="action_name">app.new</property>
Packit 1470ea
        <property name="label" translatable="yes">New</property>
Packit 1470ea
        <property name="use_underline">True</property>
Packit 1470ea
        <property name="stock_id">gtk-new</property>
Packit 1470ea
      </object>
Packit 1470ea
      <packing>
Packit 1470ea
        <property name="expand">False</property>
Packit 1470ea
        <property name="homogeneous">True</property>
Packit 1470ea
      </packing>
Packit 1470ea
    </child>
Packit 1470ea
    <child>
Packit 1470ea
      <object class="GtkToolButton" id="open_button">
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="visible">True</property>
Packit 1470ea
        <property name="can_focus">False</property>
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="is_important">True</property>
Packit 1470ea
        <property name="action_name">app.open</property>
Packit 1470ea
        <property name="label" translatable="yes">Open</property>
Packit 1470ea
        <property name="use_underline">True</property>
Packit 1470ea
        <property name="stock_id">gtk-open</property>
Packit 1470ea
      </object>
Packit 1470ea
      <packing>
Packit 1470ea
        <property name="expand">False</property>
Packit 1470ea
        <property name="homogeneous">True</property>
Packit 1470ea
      </packing>
Packit 1470ea
    </child>
Packit 1470ea
    <child>
Packit 1470ea
      <object class="GtkToolButton" id="undo_button">
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="visible">True</property>
Packit 1470ea
        <property name="can_focus">False</property>
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="is_important">True</property>
Packit 1470ea
        <property name="action_name">win.undo</property>
Packit 1470ea
        <property name="label" translatable="yes">Undo</property>
Packit 1470ea
        <property name="use_underline">True</property>
Packit 1470ea
        <property name="stock_id">gtk-undo</property>
Packit 1470ea
      </object>
Packit 1470ea
      <packing>
Packit 1470ea
        <property name="expand">False</property>
Packit 1470ea
        <property name="homogeneous">True</property>
Packit 1470ea
      </packing>
Packit 1470ea
    </child>
Packit 1470ea
    <child>
Packit 1470ea
      <object class="GtkToolButton" id="fullscreen_button">
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="visible">True</property>
Packit 1470ea
        <property name="can_focus">False</property>
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="is_important">True</property>
Packit 1470ea
        <property name="action_name">win.fullscreen</property>
Packit 1470ea
        <property name="label" translatable="yes">Fullscreen</property>
Packit 1470ea
        <property name="use_underline">True</property>
Packit 1470ea
        <property name="stock_id">gtk-fullscreen</property>
Packit 1470ea
      </object>
Packit 1470ea
      <packing>
Packit 1470ea
        <property name="expand">False</property>
Packit 1470ea
        <property name="homogeneous">True</property>
Packit 1470ea
      </packing>
Packit 1470ea
    </child>
Packit 1470ea
    <child>
Packit 1470ea
      <object class="GtkToolButton" id="leave_fullscreen_button">
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="can_focus">False</property>
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="is_important">True</property>
Packit 1470ea
        <property name="action_name">win.fullscreen</property>
Packit 1470ea
        <property name="label" translatable="yes">Leave Fullscreen</property>
Packit 1470ea
        <property name="use_underline">True</property>
Packit 1470ea
        <property name="stock_id">gtk-leave-fullscreen</property>
Packit 1470ea
      </object>
Packit 1470ea
      <packing>
Packit 1470ea
        <property name="expand">False</property>
Packit 1470ea
        <property name="homogeneous">True</property>
Packit 1470ea
      </packing>
Packit 1470ea
    </child>
Packit 1470ea
  </object>
Packit 1470ea
</interface>
Packit 1470ea
Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="code">
Packit 1470ea
<title>Código usado para xerar este exemplo</title>
Packit 1470ea
Packit 1470ea
  

Agora crearemos o código de embaixo, que engade a barra de ferrametnas desde o ficheiro que creamos.

Packit 1470ea
from gi.repository import Gtk
Packit 1470ea
from gi.repository import Gdk
Packit 1470ea
from gi.repository import Gio
Packit 1470ea
import sys
Packit 1470ea
Packit 1470ea
Packit 1470ea
class MyWindow(Gtk.ApplicationWindow):
Packit 1470ea
Packit 1470ea
    def __init__(self, app):
Packit 1470ea
        Gtk.Window.__init__(self, title="Toolbar Example", application=app)
Packit 1470ea
        self.set_default_size(400, 200)
Packit 1470ea
Packit 1470ea
        # a grid to attach the toolbar (see below)
Packit 1470ea
        grid = Gtk.Grid()
Packit 1470ea
        self.add(grid)
Packit 1470ea
        # we have to show the grid (and therefore the toolbar) with show(),
Packit 1470ea
        # as show_all() would show also the buttons in the toolbar that we want to
Packit 1470ea
        # be hidden (such as the leave_fullscreen button)
Packit 1470ea
        grid.show()
Packit 1470ea
Packit 1470ea
        # a builder to add the UI designed with Glade to the grid:
Packit 1470ea
        builder = Gtk.Builder()
Packit 1470ea
        # get the file (if it is there)
Packit 1470ea
        try:
Packit 1470ea
            builder.add_from_file("toolbar_builder.ui")
Packit 1470ea
        except:
Packit 1470ea
            print("file not found")
Packit 1470ea
            sys.exit()
Packit 1470ea
        # and attach it to the grid
Packit 1470ea
        grid.attach(builder.get_object("toolbar"), 0, 0, 1, 1)
Packit 1470ea
Packit 1470ea
        # two buttons that will be used later in a method
Packit 1470ea
        self.fullscreen_button = builder.get_object("fullscreen_button")
Packit 1470ea
        self.leave_fullscreen_button = builder.get_object(
Packit 1470ea
            "leave_fullscreen_button")
Packit 1470ea
Packit 1470ea
        # create the actions that control the window, connect their signal to a
Packit 1470ea
        # callback method (see below), add the action to the window:
Packit 1470ea
Packit 1470ea
        # undo
Packit 1470ea
        undo_action = Gio.SimpleAction.new("undo", None)
Packit 1470ea
        undo_action.connect("activate", self.undo_callback)
Packit 1470ea
        self.add_action(undo_action)
Packit 1470ea
Packit 1470ea
        # and fullscreen
Packit 1470ea
        fullscreen_action = Gio.SimpleAction.new("fullscreen", None)
Packit 1470ea
        fullscreen_action.connect("activate", self.fullscreen_callback)
Packit 1470ea
        self.add_action(fullscreen_action)
Packit 1470ea
Packit 1470ea
    # callback for undo
Packit 1470ea
    def undo_callback(self, action, parameter):
Packit 1470ea
        print("You clicked \"Undo\".")
Packit 1470ea
Packit 1470ea
    # callback for fullscreen
Packit 1470ea
    def fullscreen_callback(self, action, parameter):
Packit 1470ea
        # check if the state is the same as Gdk.WindowState.FULLSCREEN, which
Packit 1470ea
        # is a bit flag
Packit 1470ea
        is_fullscreen = self.get_window().get_state(
Packit 1470ea
        ) & Gdk.WindowState.FULLSCREEN != 0
Packit 1470ea
        if is_fullscreen:
Packit 1470ea
            self.unfullscreen()
Packit 1470ea
            self.leave_fullscreen_button.hide()
Packit 1470ea
            self.fullscreen_button.show()
Packit 1470ea
        else:
Packit 1470ea
            self.fullscreen()
Packit 1470ea
            self.fullscreen_button.hide()
Packit 1470ea
            self.leave_fullscreen_button.show()
Packit 1470ea
Packit 1470ea
Packit 1470ea
class MyApplication(Gtk.Application):
Packit 1470ea
Packit 1470ea
    def __init__(self):
Packit 1470ea
        Gtk.Application.__init__(self)
Packit 1470ea
Packit 1470ea
    def do_activate(self):
Packit 1470ea
        win = MyWindow(self)
Packit 1470ea
        # show the window - with show() not show_all() because that would show also
Packit 1470ea
        # the leave_fullscreen button
Packit 1470ea
        win.show()
Packit 1470ea
Packit 1470ea
    def do_startup(self):
Packit 1470ea
        Gtk.Application.do_startup(self)
Packit 1470ea
Packit 1470ea
        # actions that control the application: create, connect their signal to a
Packit 1470ea
        # callback method (see below), add the action to the application
Packit 1470ea
Packit 1470ea
        # new
Packit 1470ea
        new_action = Gio.SimpleAction.new("new", None)
Packit 1470ea
        new_action.connect("activate", self.new_callback)
Packit 1470ea
        app.add_action(new_action)
Packit 1470ea
Packit 1470ea
        # open
Packit 1470ea
        open_action = Gio.SimpleAction.new("open", None)
Packit 1470ea
        open_action.connect("activate", self.open_callback)
Packit 1470ea
        app.add_action(open_action)
Packit 1470ea
Packit 1470ea
    # callback for new
Packit 1470ea
    def new_callback(self, action, parameter):
Packit 1470ea
        print("You clicked \"New\".")
Packit 1470ea
Packit 1470ea
    # callback for open
Packit 1470ea
    def open_callback(self, action, parameter):
Packit 1470ea
        print("You clicked \"Open\".")
Packit 1470ea
Packit 1470ea
app = MyApplication()
Packit 1470ea
exit_status = app.run(sys.argv)
Packit 1470ea
sys.exit(exit_status)
Packit 1470ea
Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="methods">
Packit 1470ea
<title>Métodos útiles para Gtk.Builder</title>
Packit 1470ea

Para os métodos útiles para o widget Toolbar, vexa <link xref="toolbar.py"/>

Packit 1470ea
Packit 1470ea

Gtk.Builder constrúe unha interface desde unha definición de IU en XML.

Packit 1470ea
Packit 1470ea
<list>
Packit 1470ea
<item>

add_from_file(nomedeficheiro) carga e analiza o ficheiro fornecido e combínao cos contidos actuais de Gtk.Builder.

</item>
Packit 1470ea
<item>

add_from_string(string) parses the given string and merges it with the current contents of the Gtk.Builder.

</item>
Packit 1470ea
<item>

add_objects_from_file(filename, object_ids) is the same as add_from_file(), but it loads only the objects with the ids given in the object_ids list.

</item>
Packit 1470ea
<item>

add_objects_from_string(string, object_ids) is the same as add_from_string(), but it loads only the objects with the ids given in the object_ids list.

</item>
Packit 1470ea
<item>

get_object(object_id) retrieves the widget with the id object_id from the loaded objects in the builder.

</item>
Packit 1470ea
<item>

get_objects() devolve todos os obxectos cargados.

</item>
Packit 1470ea
<item>

connect_signals(handler_object) connects the signals to the methods given in the handler_object. This can be any object which contains keys or attributes that are called like the signal handler names given in the interface description, e.g. a class or a dict. In line 39 the signal "activate" from the action undo_action is connected to the callback function undo_callback() using action.connect(signal, callback function). See <link xref="signals-callbacks.py"/> for a more detailed explanation.

Packit 1470ea
</item>
Packit 1470ea
</list>
Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="references">
Packit 1470ea
<title>API References</title>
Packit 1470ea

Neste exemplo empregaremos o seguinte:

Packit 1470ea
<list>
Packit 1470ea
  <item>

<link href="http://developer.gnome.org/gtk3/unstable/GtkGrid.html">GtkGrid</link>

</item>
Packit 1470ea
  <item>

<link href="http://developer.gnome.org/gtk3/unstable/GtkBuilder.html">GtkBuilder</link>

</item>
Packit 1470ea
  <item>

<link href="http://developer.gnome.org/gtk3/unstable/GtkWidget.html">GtkWidget</link>

</item>
Packit 1470ea
  <item>

<link href="http://developer.gnome.org/gdk3/unstable/gdk3-Event-Structures.html#GdkEventWindowState">Event Structures</link>

</item>
Packit 1470ea
</list>
Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
</page>