|
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>
|