Blame platform-demos/es/textview.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="textview.py" xml:lang="es">
Packit 1470ea
  <info>
Packit 1470ea
    <title type="text">TextView (Python)</title>
Packit 1470ea
    <link type="guide" xref="beginner.py#multiline"/>
Packit 1470ea
    <link type="seealso" xref="strings.py"/>
Packit 1470ea
    <link type="seealso" xref="scrolledwindow.py"/>
Packit 1470ea
    <link type="next" xref="dialog.py"/>
Packit 1470ea
    <revision version="0.2" date="2012-06-19" status="draft"/>
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
    <credit type="author copyright editor">
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
    <desc>Un widget que muestra un GtkTextBuffer</desc>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Daniel Mustieles</mal:name>
Packit 1470ea
      <mal:email>daniel.mustieles@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2011 - 2017</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Nicolás Satragno</mal:name>
Packit 1470ea
      <mal:email>nsatragno@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2012 - 2013</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Jorge González</mal:name>
Packit 1470ea
      <mal:email>jorgegonz@svn.gnome.org</mal:email>
Packit 1470ea
      <mal:years>2011</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>TextView</title>
Packit 1470ea
Packit 1470ea
  <note style="sidebar">

Esto es un ejemplo de Gtk.TextView.

Packit 1470ea
  

Si se pulsa «Intro» se obtiene una línea nueva.

Packit 1470ea
  

Pero también se puede obtener una línea nueva si se escribe una frase larga (el texto se ajustará a los saltos de línea entre palabras.

Packit 1470ea
  

Si es escribe una palabra laaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarga

Packit 1470ea
  

(esto es una palabra larga)

Packit 1470ea
  

, aparecerá una barra de desplazamiento horizontal.

</note>
Packit 1470ea
Packit 1470ea
  <media type="image" mime="image/png" src="media/textview.png"/>
Packit 1470ea
Packit 1470ea
  <links type="section"/>
Packit 1470ea
Packit 1470ea
  <section id="code">
Packit 1470ea
  <title>Código usado para generar este ejemplo</title>
Packit 1470ea
Packit 1470ea
  from gi.repository import Gtk
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="TextView Example", application=app)
Packit 1470ea
        self.set_default_size(300, 450)
Packit 1470ea
Packit 1470ea
        # a scrollbar for the child widget (that is going to be the textview)
Packit 1470ea
        scrolled_window = Gtk.ScrolledWindow()
Packit 1470ea
        scrolled_window.set_border_width(5)
Packit 1470ea
        # we scroll only if needed
Packit 1470ea
        scrolled_window.set_policy(
Packit 1470ea
            Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
Packit 1470ea
Packit 1470ea
        # a text buffer (stores text)
Packit 1470ea
        buffer1 = Gtk.TextBuffer()
Packit 1470ea
Packit 1470ea
        # a textview (displays the buffer)
Packit 1470ea
        textview = Gtk.TextView(buffer=buffer1)
Packit 1470ea
        # wrap the text, if needed, breaking lines in between words
Packit 1470ea
        textview.set_wrap_mode(Gtk.WrapMode.WORD)
Packit 1470ea
Packit 1470ea
        # textview is scrolled
Packit 1470ea
        scrolled_window.add(textview)
Packit 1470ea
Packit 1470ea
        self.add(scrolled_window)
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
        win.show_all()
Packit 1470ea
Packit 1470ea
    def do_startup(self):
Packit 1470ea
        Gtk.Application.do_startup(self)
Packit 1470ea
Packit 1470ea
app = MyApplication()
Packit 1470ea
exit_status = app.run(sys.argv)
Packit 1470ea
sys.exit(exit_status)
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="methods">
Packit 1470ea
  <title>Métodos útiles para un widget «TextView»</title>
Packit 1470ea
  

Un Gtk.TextView muestra el texto almacenado en un Gtk.TextBuffer. Sin embargo, la mayor parte de la manipulación de texto se hace con iteradores, representados por un Gtk.TextIter: una posición entre dos caracteres en el búfer de texto. Los iteradores no son válidos indefinidamente; cada vez que se modifica el búfer de alguna manera que se altere su contenido, todos los iteradores relevantes dejan de ser válidos. Es por esto que no se pueden usar iteradores para mantener posiciones entre modificaciones del búfer. Para mantener una posición, se usa una Gtk.TextMark, que puede hacerse visible con visible(True). Un búfer de texto contiene dos marcas empotradas: una marca «insert» (la posición del cursor) y la marca «selection_bound».

Packit 1470ea
  

Métodos para un widget «TextView»:

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

El widget «TextView» es editable de manera predeterminada. Si prefiere que no lo sea, use set_editable(False). Si el búfer no tiene texto editable, puede ser una buena idea usar set_cursor_visible(False) también.

</item>
Packit 1470ea
    <item>

La alineación del texto se establece con set_justification(Gtk.Justification.JUSTIFICACIÓN) donde JUSTIFICACIÓN puede ser LEFT, RIGHT, CENTER, FILL.

</item>
Packit 1470ea
    <item>

El ajuste de línea del texto se establece con set_wrap_mode(Gtk.WrapMode.WRAP) donde WRAP es uno de NONE (el área de texto se hace más ancha), CHAR (rompe líneas en cualquier lugar en que el cursor pueda aparecer), WORD (rompe líneas entre palabras), WORD_CHAR (rompe líneas entre palabras, pero si no es suficiente, entre caracteres).

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

Métodos para un widget «TextBuffer»:

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

get_insert() devuelve la Gtk.TextMark que representa al cursor, que es el punto de inserción.

</item>
Packit 1470ea
    <item>

get_selection_bound() devuelve la Gtk.TextMark que representa los límites de la selección.

</item>
Packit 1470ea
    <item>

set_text("texto", longitud) donde longitud es un entero positivo o -1, establece el contenido del búfer como los primeros longitud caracteres del "texto". Si se omite longitud o es -1, se inserta todo el texto. El contenido del búfer, si existe, se destruye.

</item>
Packit 1470ea
    <item>

insert(iter, "texto", longitud), donde iter es un iterador de texto y longitud es un entero positivo o -1, inserta en el búfer en iter los primeros longitud caracteres del texto. Si se omite longitud o es -1, se inserta todo el texto.

</item>
Packit 1470ea
    <item>

insert_at_cursor("texto", longitud) hace los mismo que insert(iter, "texto", longitud), tomando el cursor actual como iter.

</item>
Packit 1470ea
    <item>

create_mark("nombre_de_la_marca", iter, gravedad_izquierda) donde iter es un Gtk.TextIter y gravedad_izquierda es un booleano, crea una Gtk.TextMark en la posición de iter. Si "nombre_de_la_marca" es None, la marca es anónima; de lo contrario, la marca puede obtenerse por su nombre usando get_mark(). Si una marca tiene gravedad izquierda, y el texto se inserta en la posición actual de la marca, esta se moverá a la izquierda del texto recién insertado. Si gravedad_izquierda se omite, su valor predeterminado es False.

</item>
Packit 1470ea
    <item>

Para especificar que algún texto en el búfer debe tener un formato específico, defina una etiqueta que contenga esa información de formato, y luego aplíquela a la región de texto usando create_tag("nombre de la etiqueta", propiedad) y apply_tag(etiqueta, iter_inicial, iter_final) como en, por ejemplo:

Packit 1470ea
      
Packit 1470ea
tag = textbuffer.create_tag("orange_bg", background="orange")
Packit 1470ea
textbuffer.apply_tag(tag, start_iter, end_iter)
Packit 1470ea
     

A continuación se muestran algunos de los estilos comunes aplicados al texto:

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

Color de fondo (propiedad «background»)

</item>
Packit 1470ea
        <item>

Color de primer plano (propiedad «foreground»)

</item>
Packit 1470ea
        <item>

Subrayado (propiedad «underline»)

</item>
Packit 1470ea
        <item>

Negrita (propiedad «weight»)

</item>
Packit 1470ea
        <item>

Cursiva (propiedad «style»)

</item>
Packit 1470ea
        <item>

Tachado (propiedad «strikethrough»)

</item>
Packit 1470ea
        <item>

Justificación (propiedad «justification»)

</item>
Packit 1470ea
        <item>

Tamaño (propiedades «size» y «size-points»)

</item>
Packit 1470ea
        <item>

Ajuste de texto (propiedad «wrap-mode»)

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

También puede eliminar etiquetas particulares más tarde usando remove_tag() o eliminar todas las etiquetas en una región dada llamando a remove_all_tags().

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

Métodos para un widget «TextIter»

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

forward_search(cadena, banderas, límite) busca cadena hacia delante. La búsqueda no continuará después del límite Gtk.TextIter. Las banderas pueden ser cualquier combinación de las siguientes, concatenándolas con el operador OR a nivel de bits |: 0 (la coincidencia debe ser exacta); Gtk.TextSearchFlags.VISIBLE_ONLY (la coincidencia puede tener texto invisible intercalado en «aguja»); Gtk.TextSearchFlags.TEXT_ONLY (la coincidencia puede tener «pixbufs» o widgets hijos mezclados dentro del rango coincidente); Gtk.TextSearchFlags.CASE_INSENSITIVE (el texto coincidirá sin importar su capitalización). El método devuelve una tupla que contiene un Gtk.TextIter apuntando al inicio y al primer carácter después de la coincidencia; si no se encuentra, se devuelve None.

</item>
Packit 1470ea
    <item>

backward_search(cadena, banderas, límite) hace lo mismo que forward_search(), pero hacia atrás.

</item>
Packit 1470ea
  </list>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="references">
Packit 1470ea
  <title>Referencias de la API</title>
Packit 1470ea
  

En este ejemplo se usa lo siguiente:

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

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

</item>
Packit 1470ea
    <item>

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

</item>
Packit 1470ea
    <item>

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

</item>
Packit 1470ea
    <item>

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

</item>
Packit 1470ea
    <item>

<link href="http://developer.gnome.org/gtk3/unstable/gtk3-Standard-Enumerations.html">Enumeraciones estándar</link>

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