jueves, 23 de abril de 2020

TkInter - de marciano a humano - sección 8 El Widget Canvas

8. El widget Canvas

Un Canvas es un área rectangular destinada a dibujar imágenes u otros diseños complejos. En él puede colocar gráficos, texto, widgets o marcos (Frames). Consulte las siguientes secciones para conocer los métodos que crean objetos en Canvas:

.create_arc(): un corte de una elipse. Consulte la Sección 8.7.

.create_bitmap(): una imagen como mapa de bits. Consulte la Sección 8.8.

.create_image(): una imagen gráfica. Consulte la Sección 8.9.

.create_line(): uno o más segmentos de línea. Consulte la Sección 8.10.

.create_oval(): una elipse, use esto también para dibujar círculos, que son un caso especial de una elipse. Consulte la Sección 8.11.

.create_polygon(): un polígono. Consulte la Sección 8.12.

.create_rectangle(): un rectángulo. Consulte la Sección 8.13.

.create_text(): anotación de texto. Consulte la Sección 8.14.

.create_window(): una ventana rectangular. Consulte la Sección 8.15.

Para crear un objeto Canvas:

w=tk.Canvas(parent, option=value, ...)

El constructor devuelve el nuevo widget de Canvas. Las opciones admitidas incluyen:

Tabla 6. Opciones de widget de Canvas

bd o borderwidth

Ancho del borde alrededor del exterior del Canvas, ver Sección 5.1. El valor predeterminado es dos píxeles.

bg o background

Color de fondo del Canvas. El valor predeterminado es un gris claro, aproximadamente '#E4E4E4'.

closeenough

Un flotante que especifica qué tan cerca debe estar el mouse de un elemento para empujarlo a un lado dentro de él. El valor predeterminado es 1.0.

confine

Si es verdadero (es el valor predeterminado), el Canvas no se puede desplazar fuera del scrollregion (ver abajo).

cursor

Cursor utilizado en el Canvas. Consulte la Sección 5.8.

height

Tamaño del Canvas en la dimensión Y. Consulte la Sección 5.1.

highlightbackground

Color del foco resaltado cuando el widget no tiene foco. Ver sección 53.

highlightcolor

Color que se muestra en el resaltado de foco.

highlightthickness

Espesor del foco resaltado. El valor predeterminado es 1.

relief

El estilo de relieve del lienzo. El valor predeterminado es tk.FLAT. Consulte la Sección 5.6.

scrollregion

Una tupla (w, n, e, s) que define qué tan grande puede ser el área del Canvas a desplazarse, donde w es el lado izquierdo, n la parte superior, e el lado derecho, y s la parte inferior.

selectbackground

El color de fondo que se usará para mostrar los elementos seleccionados.

selectborderwidth

El ancho del borde para usar alrededor de los elementos seleccionados.

selectforeground

El color de primer plano que se usará para mostrar los elementos seleccionados.

takefocus

Normalmente, takefocus (consulte la Sección 53) recorrerá este widget con la tecla de tabulación solo si hay enlaces de teclado establecidos para ello (consulte la Sección 54). Si establece esta opción en 1, el foco siempre visitará este widget. Para obtener el comportamiento predeterminado puede configurarlo en ‘ ’.

width

Tamaño del Canvas en la dimensión X. Consulte la Sección 5.1.

xscrollincrement

Normalmente, Canvas se puede desplazar horizontalmente a cualquier posición. Puedes obtener este comportamiento al establecer xscrollincrement en cero. Si configura esta opción en alguna dimensión positiva, Canvas solo se puede colocar en múltiplos de esa distancia, y el valor se utilizará para desplazarse por unidades de desplazamiento, como cuando el usuario hace clic en las flechas en los extremos de una barra de desplazamiento. Para más información sobre unidades de desplazamiento, consulte la Sección 22.

xscrollcommand

Si el Canvas es desplazable, establezca esta opción en el método .set() de la barra horizontal de desplazamiento.

yscrollincrement

Funciona como xscrollincrement, pero gobierna el movimiento vertical.

yscrollcommand

Si el Canvas es desplazable, esta opción debería ser el método .set() de la barra de desplazamiento vertical.


8.1. Canvas coordinates (Coordenadas del lienzo)

Debido a que el Canvas puede ser más grande que la ventana y está equipado con barras de desplazamiento para mover el Canvas general alrededor de la ventana, existen dos sistemas de coordenadas para cada uno de ellos:

Las coordenadas de la ventana de un punto son relativas a la esquina superior izquierda del área en la pantalla donde aparece el Canvas.

Las coordenadas del Canvas de un punto son relativas a la esquina superior izquierda del lienzo total.


8.2. The Canvas display list (lista de visualización del lienzo)

La lista de visualización se refiere a la secuencia de todos los objetos en el Canvas, desde el fondo (la "parte inferior" de la lista de visualización) hasta el primer plano (la "parte superior").

Si se superponen dos objetos, el que está encima del otro en la lista de visualización significa el que está más cerca del primer plano, que aparecerá en el área de superposición y oscurecerá el siguiente. Por defecto, siempre se crean nuevos objetos en la parte superior de la lista de visualización (y, por lo tanto, delante de todos los demás objetos), pero puede volver a ordenar la lista de visualización.


8.3. Canvas object ID’s (ID de objeto del lienzo)

El ID de objeto de un objeto en el Canvas es el valor devuelto por el constructor para ese objeto. Todos los valores de ID de objeto son enteros simples, y la ID de objeto de un objeto es única dentro de ese Canvas.


8.4. Canvas tags (Etiquetas de lienzo)

Una etiqueta es una cadena que puede asociar con objetos en el Canvas.

Una etiqueta se puede asociar con cualquier número de objetos en el Canvas, incluido cero.

- Un objeto puede tener cualquier número de etiquetas asociadas, incluido cero.

Las etiquetas tienen muchos usos. Por ejemplo, si está dibujando un mapa en un Canvas, y hay objetos de texto para las etiquetas en los ríos, puede adjuntar la etiqueta 'riverLabel' a todos esos objetos de texto. Esto le permitiría realizar operaciones en todos los objetos con esa etiqueta, como cambiar su color o eliminarlos.


8.5. Canvas tagOrId arguments (Argumentos de etiqueta de lienzo)

Un argumento tagOrId especifica uno o más objetos en el lienzo.

- Si un argumento tagOrId es un entero, se trata como un ID de objeto y solo se aplica al objeto único con ese ID. Consulte la Sección 8.3.

Si dicho argumento es una cadena, se interpreta como una etiqueta y selecciona todos los objetos que tienen esa etiqueta (si hay alguna). Consulte la Sección 8.4.


8.6. Methods on Canvas widgets (Métodos en widgets de Canvas)

Todos los objetos Canvas son compatibles con estos métodos:

.addtag_above (newTag, tagOrId)

Adjunta una nueva etiqueta al objeto justo encima de la especificada por tagOrId en la lista de visualización. El argumento newTag es la etiqueta que desea adjuntar, como una cadena.

.addtag_all (newTag)

Adjunta la etiqueta dada newTag a todos los objetos en el lienzo.

.addtag_below (newTag, tagOrID)

Adjunta una nueva etiqueta al objeto justo debajo de la especificada por tagOrId en la lista de visualización. El argumento newTag es una cadena de etiqueta.

.addtag_closest (newTag, x, y, halo=None, start=None)

Agrega una etiqueta al objeto más cercano a la coordenada de pantalla (x, y). Si hay dos o más objetos a la misma distancia, se selecciona el que está más arriba en la lista de visualización.

Use el argumento de halo para aumentar el tamaño efectivo del punto. Por ejemplo, un valor de 5 trataría cualquier objeto dentro de 5 píxeles de (x, y) como superpuesto.

Si se pasa una ID de objeto en el argumento de inicio, este método etiqueta el objeto de mayor calificación que está debajo del inicio en la lista de visualización.

.addtag_enclosed (newTag, x1, y1, x2, y2)

Agregue la etiqueta newTag a todos los objetos que ocurren completamente dentro del rectángulo cuya esquina superior izquierda es (x1, y1) y cuya esquina inferior derecha es (x2, y2).

.addtag_overlapping (newTag, x1, y1, x2, y2)

Al igual que el método anterior, pero afecta a todos los objetos que comparten al menos un punto con el rectángulo dado.

.addtag_withtag (newTag, tagOrId)

Agrega la etiqueta newTag al objeto u objetos especificados por tagOrId.

.bbox (tagOrId=None)

Devuelve una tupla (x1, y1, x2, y2) que describe un rectángulo que encierra todos los objetos especificados por tagOrId. Si se omite el argumento, devuelve un rectángulo que encierra todos los objetos en el lienzo. La esquina superior izquierda del rectángulo es (x1, y1) y la esquina inferior derecha es (x2, y2).

.canvasx (screenx, gridspacing=None)

Traduce una ventana x coordenada screenx a una coordenada del lienzo. Si se proporciona el espaciado de cuadrícula, la coordenada del lienzo se redondea al múltiplo más cercano de ese valor.

.canvasy (screeny, gridspacing=None)

Traduce una ventana y coordenada screeny a una coordenada del lienzo. Si se proporciona el espaciado de cuadrícula, la coordenada del lienzo se redondea al múltiplo más cercano de ese valor.

.coords (tagOrId, x0, y0, x1, y1, ..., xn, yn)

Si pasa solo el argumento tagOrId, devuelve una tupla de las coordenadas del objeto más bajo o único especificado por ese argumento. El número de coordenadas depende del tipo de objeto. En la mayoría de los casos, será una tupla de 4 (x1, y1, x2, y2) que describe el cuadro delimitador del objeto.

Puede mover un objeto pasando nuevas coordenadas.

.dchars (tagOrId, first=0, last=first)

Elimina caracteres de un elemento o elementos de texto. Los caracteres entre el primero y el último inclusive se eliminan, donde esos valores pueden ser índices enteros o la cadena 'fin' para significar el final del texto. Por ejemplo, para un lienzo C y un elemento I, C.dchars(I, 1, 1) eliminará el segundo carácter.

.delete (tagOrId)

Elimina el objeto u objetos seleccionados por tagOrId. No se considera un error si ningún elemento coincide con tagOrId.

.dtag (tagOrId, tagToDelete)

Elimina la etiqueta especificada por tagToDelete del objeto u objetos especificados por tagOrId.

.find_above (tagOrId)

Devuelve el número de ID del objeto justo encima del objeto especificado por tagOrId. Si coinciden varios objetos, obtienes el más alto. Devuelve una tupla vacía si le pasa el ID del objeto más alto.

.find_all()

Devuelve una lista de los números de ID de objeto para todos los objetos en el lienzo, de menor a mayor.

.find_below (tagOrId)

Devuelve el ID del objeto justo debajo del especificado por tagOrId. Si coinciden varios objetos, obtienes el más bajo. Devuelve una tupla vacía si le pasa el ID del objeto más bajo.

.find_closest (x, y, halo=None, start=None)

Devuelve una tupla singleton que contiene el ID del objeto más cercano al punto (x, y). Si no hay objetos calificados, devuelve una tupla vacía.

Use el argumento de halo para aumentar el tamaño efectivo del punto. Por ejemplo, halo=5 trataría cualquier objeto dentro de los 5 píxeles de (x, y) como superpuesto.

Si se pasa una ID de objeto como argumento de inicio, este método devuelve el objeto de mayor calificación que está debajo del inicio en la lista de visualización.

.find_enclosed (x1, y1, x2, y2)

Devuelve una lista de las ID de objeto de todos los objetos que ocurren completamente dentro del rectángulo cuya esquina superior izquierda es (x1, y1) y la esquina inferior derecha es (x2, y2).

.find_overlapping (x1, y1, x2, y2)

Al igual que el método anterior, pero devuelve una lista de las ID de objeto de todos los objetos que comparten al menos un punto con el rectángulo dado.

.find_withtag (tagOrId)

Devuelve una lista de los ID de objeto del objeto u objetos especificados por tagOrId.

.focus (tagOrId=None)

Mueve el foco al objeto especificado por tagOrId. Si hay varios de estos objetos, mueve el foco al primero en la lista de visualización que permite un cursor de inserción. Si no hay elementos que califican o el lienzo no tiene foco, el foco no se mueve.

Si se omite el argumento, devuelve la ID del objeto que tiene foco, o ' ' si ninguno de ellos lo tiene, .gettags(tagOrId)

Si tagOrId es un ID de objeto, devuelve una lista de todas las etiquetas asociadas con ese objeto. Si el argumento es una etiqueta, devuelve todas las etiquetas para el objeto más bajo que tiene esa etiqueta.

.icursor (tagOrId, index)

Suponiendo que el elemento seleccionado permite la inserción de texto y tiene el foco, establece el cursor de inserción en el índice, que puede ser un índice entero o la cadena 'end'. No tiene efecto de otra manera.

.index (tagOrId, specifier)

Devuelve el índice entero del especificador dado en el elemento de texto especificado por tagOrId (el más bajo que, si tagOrId especifica varios objetos). El valor de retorno es la posición correspondiente como un entero, con la convención habitual de Python, donde 0 es la posición antes del primer carácter.

El argumento especificador puede ser cualquiera de:

tk.INSERT, para devolver la posición actual del cursor de inserción.

tk.END, para devolver la posición después del último carácter del elemento.

tk.SEL_FIRST, para devolver la posición del inicio de la selección de texto actual. Tkinter generará una excepción tk.TclError si el elemento de texto no contiene actualmente la selección de texto.

tk.SEL_LAST, para devolver la posición después del final de la selección de texto actual, o elevar tk.TclError si el elemento no contiene actualmente la selección.

Una cadena de la forma "@x, y", para devolver el carácter del carácter que contiene las coordenadas del lienzo (x, y). Si esas coordenadas están arriba o a la izquierda del elemento de texto, el método devuelve 0. Si las coordenadas están a la derecha o debajo del elemento, el método devuelve el índice del final del elemento.

.insert (tagOrId, specifier, text)

Inserta la cadena dada en el objeto u objetos especificados por tagOrId, en la posición dada por el argumento especificador.

Los valores del especificador pueden ser:

- Cualquiera de las palabras clave tk.INSERT, tk.END, tk.SEL_FIRST o tk.SEL_LAST. Consulte la descripción del método de índice anterior para la interpretación de estos códigos.

La posición de la inserción deseada, utilizando la convención normal de Python para posiciones en cadenas.

.itemcget (tagOrId, option)

Devuelve el valor de la opción de configuración dada en el objeto seleccionado (o el objeto más bajo si tagOrId especifica más de uno). Esto es similar al método .cget() para objetos Tkinter.

.itemconfigure (tagOrId, option, ...)

Si no se proporcionan argumentos de opción, devuelve un diccionario cuyas claves son las opciones del objeto especificado por tagOrId (el más bajo, si tagOrId especifica varios objetos).

Para cambiar la opción de configuración del elemento especificado, proporcione uno o más argumentos de palabras clave del formulario option=value.

.move (tagOrId, xAmount, yAmount)

Mueve los elementos especificados por tagOrId agregando xAmount a sus coordenadas x e yAmount a sus coordenadas y.

.postscript (option, ...)

Genera una representación PostScript encapsulada de los contenidos actuales del lienzo. Las opciones incluyen:

colormode

 Use 'color' para salida de color, 'gray' para escala de grises o 'mono' para blanco y negro.

file

Si se proporciona, nombra un archivo donde se escribirá el PostScript. Si no se da esta opción, el PostScript se devuelve como una cadena.

height

Indica el tamaño Y del lienzo. El valor predeterminado es la altura visible completa del lienzo.

rotate

Si es falso, la página se representará en orientación vertical, si es cierto, en horizontal.

x

Coordenada del lienzo más a la izquierda del área a imprimir.

y

Coordenada del lienzo superior del área a imprimir.

width

Indica el tamaño X del lienzo para imprimir. El valor predeterminado es el ancho visible del lienzo.

.scale (tagOrId, xOffset, yOffset, xScale, yScale)

Escala todos los objetos según su distancia desde un punto P=(xOffset, yOffset). Los factores de escala xScale e yScale se basan en un valor de 1.0, lo que significa que no hay escala. Cada punto en los objetos seleccionados por tagOrId se mueve de modo que su distancia x desde P se multiplique por xScale y su distancia y se multiplique por yScale. Este método no cambiará el tamaño de un elemento de texto, pero puede moverlo.

.scan_dragto (x, y, gain=10.0)

Consulte el método .scan_mark() a continuación.

.scan_mark (x, y)

Este método se utiliza para implementar el desplazamiento rápido de un lienzo. La intención es que el usuario presione y mantenga presionado un botón del mouse, luego mueva el mouse hacia arriba para escanear (desplazar) el lienzo horizontal y verticalmente en esa dirección a una velocidad que depende de cuánto se haya movido el mouse desde que se presionó el botón.

Para implementar esta función, vincule el evento de botones del mouse a un controlador que llame a scan_mark(x, y) donde x e y son las coordenadas actuales del mouse. Vincula el evento <Motion> a un controlador que, suponiendo que el botón del mouse aún esté presionado, llama a scan_dragto(x, y, gain) donde x e y son las coordenadas actuales del mouse.

El argumento de ganancia controla la velocidad de escaneo. Este argumento tiene un valor predeterminado de 10.0. Use números más grandes para escanear más rápido.

.select_adjust (oid, specifier)

Ajusta los límites de la selección de texto actual para incluir la posición dada por el argumento del especificador, en el elemento de texto con el ID de objeto oid.

El ancla de selección actual también se establece en la posición especificada. Para una discusión sobre el ancla de selección, vea el método select_from del lienzo a continuación.

Para conocer los valores de specifier, consulte el método de Canvas insert.

.select_clear ()

Elimina la selección de texto actual, si está establecida. Si no hay una selección actual, .select_from(oid, specifier) no hará nada.

Este método establece el ancla de selección en la posición dada por el argumento specifier, dentro del elemento de texto cuya identificación de objeto es dada por oid.

El texto seleccionado actualmente en un Canvas determinado se especifica mediante tres posiciones: la posición inicial, la posición final y el ancla de selección, que puede estar en cualquier lugar dentro de esas dos posiciones.

Para cambiar la posición del texto seleccionado actualmente, use este método en combinación con los métodos select_adjust, select_from y select_to de Canvas (q.v.).

.select_item ()

Si hay una selección de texto actual en este lienzo, devuelva la ID del objeto del elemento de texto que contiene la selección. Si no hay una selección actual, este método devuelve None.

.select_to (oid, specifier)

Este método cambia la selección de texto actual para que incluya el anclaje de selección y la posición dada por el especificador dentro del elemento de texto cuya ID de objeto es dada por oid. Para conocer los valores de specifier, consulte el método insert de Canvas.

.tag_bind (tagOrId, sequence=None, function=None, add=None)

Vincula eventos a objetos en el Canvas. Para el objeto u objetos seleccionados por tagOrId, asocia la función del controlador con la secuencia de eventos. Si el argumento de agregar es una cadena que comienza con '+', el nuevo enlace se agrega a los enlaces existentes para la secuencia dada, de lo contrario, el nuevo enlace reemplaza al de dicha secuencia.

Para obtener información general sobre enlaces de eventos, consulte la Sección 54.

Tenga en cuenta que los enlaces se aplican a los elementos que tienen esta etiqueta en el momento de la llamada al método tag_bind. Si las etiquetas se eliminan posteriormente de esos elementos, los enlaces persistirán en esos elementos. Si la etiqueta que especifica se aplica más tarde a los elementos que no tenían esa etiqueta cuando llamó a tag_bind, ese enlace no se aplicará a los elementos recién etiquetados.

.tag_lower (tagOrId, belowThis)

Mueve el objeto u objetos seleccionados por tagOrId dentro de la lista de visualización a una posición justo debajo del primer o único objeto especificado por la etiqueta o ID en bellowThis.

Si hay varios elementos con etiqueta tagOrId, se conserva su orden de apilamiento relativo.

Este método no afecta a los elementos de la ventana del lienzo. Para cambiar el orden de apilamiento de un elemento de la ventana, use un método inferior o de elevación en la ventana.

.tag_raise (tagOrId, aboveThis)

Mueve el objeto u objetos seleccionados por tagOrId dentro de la lista de visualización a una posición justo arriba del primer o único objeto especificado por la etiqueta o ID en aboveThis.

Si hay varios elementos con etiqueta tagOrId, se conserva su orden de apilamiento relativo.

Este método no afecta a los elementos de la ventana del Canvas. Para cambiar el orden de apilamiento de un elemento de la ventana, use un método inferior o de elevación en la ventana.

.tag_unbind (tagOrId, sequence, funcId=None)

Elimina los enlaces para el controlador de funciones y la secuencia de eventos del objeto u objetos del lienzo especificados por tagOrId. Consulte la Sección 54.

.type (tagOrId)

Devuelve el tipo del primer o único objeto especificado por tagOrId. El valor de retorno será una de las cadenas 'arc', 'bitmap', 'image', 'line', 'oval', 'polygon', 'rectangle', 'text' o 'window'.

.xview (tk.MOVETO, fraction)

Este método desplaza el Canvas en relación con su imagen y está destinado a vincularse a la opción de comando de una barra de desplazamiento relacionada. El Canvas se desplaza horizontalmente a una posición dada por desplazamiento, donde 0.0 mueve el Canvas a su posición más a la izquierda y 1.0 a su posición más a la derecha.

.xview (tk.SCROLL, n, what)

Este método mueve el lienzo hacia la izquierda o hacia la derecha: el argumento que especifica cuánto se puede mover puede ser tk.UNITS o tk.PAGES, n indica cuántas unidades mover el Canvas a la derecha en relación con su imagen (o izquierda, si es negativo)

El tamaño del movimiento para tk.UNITS viene dado por el valor de la opción xscrollincrement del Canvas, consulte la Sección 22.

Para los movimientos de tk.PAGES, n se multiplica por nueve décimas del ancho del lienzo.

.xview_moveto (fraction)

Este método desplaza el Canvas de la misma manera que .xview(tk.MOVETO, fraction).

.xview_scroll (n, what)

Igual que .xview(tk.SCROLL, n, what).

.yview (tk.MOVETO, fraction)

El desplazamiento vertical equivalente de .xview(tk.MOVETO, ...).

.yview (tk.SCROLL, n, what)

El desplazamiento vertical equivalente de .xview(tk.SCROLL, ...).

.yview_moveto (fraction)

El equivalente de desplazamiento vertical de .xview().

.yview_scroll (n, what)

Los equivalentes de desplazamiento vertical de .xview(), .xview_moveto() y .xview_scroll().


8.7. Canvas arc objects (Objetos de arco de Canvas)

Un objeto de arco sobre un Canvas, en su forma más general, es un corte en forma de cuña sacado de una elipse. Esto incluye elipses y círculos completos como casos especiales. Consulte la Sección 8.11.

Para crear un objeto de arco en un Canvas C, use:

id=C.create_arc(x0, y0, x1, y1, option, ...)

El constructor devuelve el ID de objeto del nuevo objeto de arco en el Canvas C.

El punto (x0, y0) es la esquina superior izquierda y (x1, y1) la esquina inferior derecha de un rectángulo en el que se ajusta la elipse. Si este rectángulo es cuadrado, obtienes un círculo.

Las diversas opciones incluyen:

Tabla 7. Canvas arc options

activedash

Estas opciones se consideran cuando arc está tk.ACTIVE, es decir, cuando el mouse está sobre el arco.

Por ejemplo, la opción activefill Especifica el color interior cuando el arco está activo.

Para valores de opciones, ver dash, fill, outline, outlinestipple, stipple, y width respectivamente.

activefill

 

activeoutline

 

activeoutlinestipple

activestipple

activewidth

dash

Patrón de trazos para el contorno. Consulte la Sección 5.13.

dashoffset

Desplazamiento del patrón de guión para el contorno. Ver Sección 5.13.

disableddash

Estas opciones se aplican cuando el estado del arco es tk.DISABLED.

disabledfill

disabledoutline

disabledoutlinestipple

disabledstipple

disabledwidth

extent

Ancho de la rebanada en grados. El corte comienza en el ángulo dado por la opción de inicio y se extiende en sentido anti horario para grados de extensión.

fill

Por defecto, el interior de un arco es transparente, y fill='' seleccionará este comportamiento. También puede establecer esta opción en cualquier color y el interior del arco se rellenará con ese color.

offset

Patrón de punteado compensado para el interior del arco. Ver Sección 5.14.

outline

El color del borde alrededor del exterior del corte. El valor predeterminado es negro.

outlineoffset

Patrón de punteado compensado para el contorno. Ver Sección 5.14.

outlinestipple

Si se utiliza la opción de esquema, esta opción especifica un mapa de bits utilizado para puntear el borde. El valor predeterminado es negro, y ese valor predeterminado se puede especificar estableciendo outlinestipple=' '.

start

Ángulo inicial para el corte, en grados, medido desde la dirección +x. Si se omite, obtienes una elipse completa.

state

Esta opción es tk.NORMAL por defecto. Se puede establecer en tk.HIDDEN para hacer que el arco sea invisible o tk.DISABLED para atenuar el arco y hacer que no responda a los eventos.

stipple

Un mapa de bits que indica cómo se punteará el relleno interior del arco. El valor predeterminado es stipple='' (sólido). Probablemente quieras algo como stipple='gray25'. No tiene ningún efecto a menos que el relleno se haya configurado en algún color.

style

El valor predeterminado es dibujar todo el arco, use style=tk.PIESLICE para este estilo. Para dibujar solo el arco circular en el borde del corte, use style=tk.ARC. Para dibujar el arco circular y el acorde (una línea recta que conecta los puntos finales del arco), use style=tk.CHORD.



tags

Si se trata de una sola cadena, el arco se etiqueta con esa cadena. Use una tupla de cadenas para etiquetar el arco con múltiples etiquetas. Ver la Sección 8.4.

width

Ancho del borde alrededor del exterior del arco. El valor predeterminado es 1 píxel.


8.8. Canvas bitmap Objects

Un objeto de mapa de bits en un Canvas se muestra como dos colores, el color de fondo (para valores de 0 datos) y el color de primer plano (para valores 1).

Para crear un objeto de mapa de bits en un lienzo C, use:

id=C.create_bitmap(x, y, * option, ...)

que devuelve el número de ID entero del objeto de imagen para ese Canvas.

Los valores x e y son el punto de referencia que especifica dónde se coloca el mapa de bits. Las opciones incluyen:

Tabla 8. Opciones de mapa de bits

activebackground

Estas opciones especifican los valores de fondo, mapa de bits y primer plano cuando el mapa de bits está activo, es decir, cuando el mouse está sobre el mapa de bits.

activebitmap

El mapa de bits está posicionado con respecto al punto relativo (x, y). El enlace predeterminado =tk.CENTER, lo que significa que el mapa de bits está centrado en la posición (x, y). Consulte la Sección 5.5 para los diversos valores de opción de elección. Por ejemplo, si especificas anchor=tk.NE, el mapa de bits se colocará en ese punto (x, y) está ubicado en la esquina noreste (hacia la derecha) del mapa de bits.

activeforeground

El color que aparecerá en donde haya 0 valores en el mapa de bits. El valor predeterminado es background='', lo que significa transparente.

anchor

Se visualiza el mapa de bits, consulte la Sección 5.7.

background

El color que aparecerá en donde haya 0 valores en el mapa de bits. El valor predeterminado es background='', lo que significa transparente.

bitmap

Se visualiza el mapa de bits, consulte la Sección 5.7.

disabledbackground

Estas opciones especifican el fondo, el mapa de bits y el primer plano que se utilizará cuando el estado del mapa de bits esté DESACTIVADO.

disabledbitmap

disabledforeground

foreground

El color que aparecerá en donde se encuentre el valor 1 en el mapa de bits. El valor predeterminado es foreground='black'.

state

De forma predeterminada, los elementos se crean con start=tk.NORMAL.User.DISABLED para hacer que el elemento se ponga gris y no responda a los eventos, use tk.HIDDEN para hacer que el elemento sea invisible.

tags

Si se trata de una cadena de caracteres, el mapa de bits está etiquetado con la cadena de caracteres. Use un conjunto de cadenas de caracteres para etiquetar el mapa de bits con múltiples paletas. Consulte la Sección 8.4.


8.9. Canvas image Objects (Objetos de imagen de lienzo)

Para mostrar una imagen gráfica en un Canvas C, use:

id=C.create_image(x, y, opción, ...)

Este constructor devuelve el número de ID entero del objeto de imagen para ese Canvas.

La imagen se coloca en relación con el punto (x, y). Las opciones incluyen:

Tabla 9. Opciones de imagen de Canvas

activeimage

Se visualiza la imagen cuando el ratón utiliza el elemento. Valores de la opción, vea la imagen a continuación.

anchor

El anclaje predeterminado es anchor=tk.CENTER, lo que significa que la imagen está centrada en la posición (x, y). Consulte la Sección 5.5.

Por ejemplo, si especificas anchor=tk.S, la imagen se colocará en ese punto (x, y) se ubica en el centro del borde inferior (sur) de la imagen.

disabledimage

Imagen que se mostrará cuando el elemento esté inactivo. Para los valores de las opciones, vea la imagen a continuación.

image

Se visualiza la imagen. Consulte la Sección 5.9.

state

Normalmente, los objetos de imagen se crean en el estado tk.NORMAL. Establezca este valor en tk.DISABLED para que esté atenuado y no responda al mouse. Si lo configura en tk.HIDDEN, el elemento es invisible.

tags

Si se trata de una sola cadena, la imagen se etiqueta con esa cadena. Use una tupla de cadenas para etiquetar la imagen con varias etiquetas. Consulte la Sección 8.4.


8.10. Canvas line Objects (objetos de línea)

En general, una línea puede constar de cualquier número de segmentos conectados de extremo a extremo, y cada segmento puede ser recto o curvo. Para crear un objeto de línea en un Canvas C, use:

id=C.create_line(x0, y0, x1, y1, ..., xn, yn, option, ...)

La línea pasa por la serie de puntos (x0, y0), (x1, y1), ... (xn, yn). Las opciones incluyen:

Tabla 10. Opciones de línea

activedash

Estas opciones especifican los valores de dash, fill, stipple, y width que se utilizarán cuando la línea esté activa, es decir, cuando el mouse esté sobre ella.

activefill

activestiple

activewidth

arrow

El valor predeterminado es que la línea no tenga puntas de flecha.

Use arrow=tk.FIRST para obtener una punta de flecha en el extremo (x0, y0) de la línea.

Use arrow=tk.LAST para obtener una punta de flecha en el otro extremo.

Use arrow=tk.BOTH para puntas de flecha en ambos extremos

arrowshape

Una tupla (d1, d2, d3) que describe la forma de las puntas de flecha agregadas por la opción de flecha. El valor predeterminado es (8,10,3).



capstyle

Puede especificar la forma de la línea suave final con esta opción, consulte la Sección 5.12. La opción predeterminada es tk.BUTT.

dash

Para producir una línea discontinua, especifique esta opción, vea la Sección 5.13. La apariencia predeterminada es una línea continua.

dashoffset

Si especifica un patrón dash, el valor predeterminado es iniciar el patrón especificado al comienzo de la línea. el guión desactivado establece los mínimos opcionales para especificar que el inicio del patrón de guión ocurre a una distancia dada después del inicio de la línea. Ver sección 5.13

disableddash

Los valores de dash, fill, stipple, y width que se utilizarán cuando el elemento esté en el estado tk.DISABLED.

disabledfill

disabledstiple

disabledwisth

fill

El color a utilizar en el dibujo de la línea. El valor predeterminado es fill='black'

joinstyle

Para las líneas que se componen de más de un segmento, esta opción controla la apariencia de la unión entre segmentos. Para más detalles, consulte la Sección 5.12. El estilo predeterminado es ROUND

offset

Para las líneas punteadas, el propósito de esta opción es hacer coincidir el patrón punteado del elemento con estos objetos adyacentes. Ver Sección 5.14.

smooth

Si es verdadero, la línea se dibuja como una serie de splines parabólicas que se ajustan al conjunto de puntos. El valor predeterminado es falso, lo que representa la línea como un conjunto de segmentos rectos.

splinesteps

Si la opción suave es verdadera, cada spline se representa como un número de segmentos de línea recta. La opción de pasos de spline especifica el número de segmentos utilizados para aproximar cada sección de la línea, el valor predeterminado es splinesteps=12.

state

Normalmente, las líneas se crean en el estado tk.NORMAL. Establezca esta opción en tk.HIDDEN para que la línea sea invisible, configúrelo en tk.DISABLED para que no responda al mouse.

stipple

Para dibujar una línea punteada, configure esta opción en un mapa de bits que especifique el patrón punteado, como stipple='gray 25'. Vea la Sección 5.7.

tags

Si se trata de una sola string, la línea está etiquetada con esa string. Use una tupla de cadenas para etiquetar la línea con varias etiquetas. Ver la Sección 8.4.

width

El ancho de la línea. El valor predeterminado es 1 píxel. Consulte la Sección 5.1.


8.11. Canvas Oval Objects (Objetos ovalados)

Los óvalos, matemáticamente, son elipses, incluidos los círculos como un caso especial. La elipse se ajusta en un rectángulo definido por las coordenadas (x0, y0) de la esquina superior izquierda y las coordenadas (x1, y1) de un punto justo fuera de la esquina inferior derecha.



El óvalo coincidirá con las líneas superior e izquierda de este cuadro, pero se ajustará justo dentro de los lados inferior y derecho.

Para crear una elipse en Canvas use:

id=C.create_oval(x0, y0, x1, y1, option, ...)

que devuelve el ID de objeto del nuevo objeto oval en el Canvas C.

Opciones para óvalos:

Tabla 11. Opciones ovales de Canvas

activedash

Estas opciones especifican:

el patrón de guión

- el color de relleno

el color de contorno

el patrón de punteado de contorno

el patrón de punteado interior

los valores de ancho de contorno que se utilizarán cuando el óvalo esté en el estado tk.ACTIVE, es decir, cuando el mouse esté sobre el óvalo. Para conocer los valores de las opciones, vea dash, fill, outline, outlinestipple, stipple y width.

activefill

activeoutline

activeoutlinestipple

activestipple

activewidth

dash

Para producir un borde discontinuo alrededor del óvalo, establezca esta opción en un guión modelo, consulte la Sección 5.13.

dashoffset

Cuando se usa la opción dash, la opción dashoffset se usa para cambiar la alineación del patrón de trazos del borde en relación con el óvalo. Consulte la Sección 5.14

disableddash

Estas opciones especifican la apariencia del óvalo cuando el estado del elemento es tk.DISABLED.

disabledfill

disabledoutline

disabledoutlinestipple

disabledstipple

disabledwidth

fill

La apariencia predeterminada del interior de un óvalo es transparente, y un valor de relleno ='' seleccionará este comportamiento. También puede establecer esta opción en cualquier color y el interior de la elipse se rellenará con ese color; consulte la Sección 5.3.

offset

Patrón de punteado offset del interior. Consulte la Sección 5.14.

outline

El color del borde alrededor del exterior de la elipse. El valor predeterminado es outline='black'.

outlineoffset

Patrón de punteado offset del borde. Consulte la Sección 5.14.

stipple

Un mapa de bits que indica cómo se punteará el interior de la elipse.

El valor predeterminado es stipple='', lo que significa un color sólido. Un valor típico sería stipple='gray25'. No tiene efecto a menos que el relleno se haya configurado en algún color. Consulte la Sección 5.7.

outlinestipple

Patrón de punteado que se utilizará para el borde. Para valores de opciones vea stipple bellow.

state

Por defecto, los elementos ovales se crean en el estado tk.NORMAL. Establezca esta opción en tk.DISABLED para que el óvalo no responda a las acciones del mouse. Configúrelo en tk.HIDDEN para que el elemento sea invisible.

tags

Si se trata de una sola cadena, el óvalo se etiqueta con esa cadena. Usa una tupla de strings para etiquetar el óvalo con múltiples etiquetas. Consulte la Sección 8.4

width

Ancho del borde alrededor del exterior de la elipse. El valor predeterminado es 1 píxel. Consulte la Sección 5.1.

Si establece esto en 0 (cero), el borde no aparecerá.

Si establece esto en 0 (cero) y hace que el relleno sea transparente, puede hacer que todo el óvalo desaparezca.


8.12. Objetos de polígono de lienzo

Como se muestra, un polígono tiene dos partes: su contorno y su interior. Su geometría se especifica como una serie de vértices [(x0, y0), (x1, y1), ... (xn, yn)], pero el perímetro real incluye un segmento más desde (xn, yn) hasta (x0, y0) En este ejemplo, hay cinco vértices:



Para crear un nuevo objeto poligonal en Canvas:

id=C.create_polygon(x0, y0, x1, y1, ..., option, ...)

El constructor devuelve la ID del objeto para ese objeto. Opciones:

Tabla 12. Opciones de polígono de Canvas

activedash

Estas opciones especifican la apariencia del polígono cuando está en el estado tk.ACTIVE, es decir, cuando el mouse está sobre él. Para valores de las opciones, ver dash, fill, outline, outlinestipple, stipple, y width.

activefill

activeoutline

activeoutlinestipple

activestipple

activewidth

dash

Use esta opción para producir un borde discontinuo alrededor del polígono. Consulte la Sección 5.13.

dashoffset

Use esta opción para iniciar el patrón de guiones en algún punto de su ciclo que no sea el comienzo. Ver sección 5.13

disableddash

 

disabedfill

Estas opciones especifican la apariencia del polígono cuando state es tk.DISABLED.

disabledoutline

disabledoutlinestipple

disabledstipple

disabledwidth

fill

Puede colorear el interior configurando esta opción. El aspecto predeterminado para el interior de un polígono es transparente, y puede configurar fill='' para obtener este comportamiento. Consulte la Sección 5.3

joinestyle

Esta opción controla la apariencia de las intersecciones entre los lados adyacentes del polígono. Consulte la Sección 5.12.

offset

Desplazamiento del patrón de punteado en el interior del polígono. Ver sección 5.14.

outline

Color del contorno, por defecto outline=’’, lo que hace que el contorno sea transparente.

outlineoffset

Stipple offset para el borde. Consulte la Sección 5.14.

outlinestipple

Use esta opción para obtener un borde punteado alrededor del polígono. El valor de la opción debe ser un mapa de bits, ver sección 5.7

smooth

El esquema predeterminado usa líneas rectas para conectar los vértices, use smooth=0 para obtener ese comportamiento. Si usa smooth=1, obtendrá una curva spline continua. Además, si establece smooth=1, puede enderezar cualquier segmento duplicando las coordenadas al final de la enseñanza de ese segmento.

splinesteps

Si la opción smoot es verdadera, cada spline se representa como un número de segmentos de línea recta. La opción splinesteps especifica el número de segmentos usados ​​para aproximar cada sección de la línea, el valor por defecto es splinesteps=12.

state

Por defecto, los polígonos se crean en el estado tk.NORMAL. Configura esta opción a tk.HIDDEN para hacer el polígono invisible o tk.DISABLED para que no responda al mouse.

stipple

Un mapa de bits que indica cómo se punteará el interior del polígono.

El valor predeterminado es stipple='', lo que significa que es un color sólido. Un valor típico sería stipple='gray25'. No tiene efecto a menos que el relleno se haya configurado en algún color. Consulte la Sección 5.7.

tags

Si se trata de una sola string, el polígono se etiqueta con esa cadena. Usa una tupla de strings para etiquetar el polígono con múltiples etiquetas. Consulte la Sección 8.4.

width

Ancho del contorno, el valor predeterminado es 1. Consulte la Sección 5.1.


8.13 Objetos rectangulares

Cada rectángulo se especifica como dos puntos, (x0, y0) es la esquina superior izquierda y (x1, y1) es la ubicación del píxel justo fuera de la esquina inferior derecha.

Por ejemplo, el rectángulo especificado por la esquina superior izquierda (100, 100) y la esquina inferior derecha (102, 102) es un cuadrado de dos píxeles por dos píxeles, incluido el píxel (101, 101) pero no está incluido el (102, 102).

Los rectángulos se dibujan en dos partes:

El contorno se encuentra dentro del rectángulo en sus lados superior e izquierdo, pero fuera del rectángulo en su lado inferior y derecho. La apariencia predeterminada es un borde negro de un píxel de ancho. Por ejemplo, considere un rectángulo con la esquina superior izquierda (10, 10) y la esquina inferior derecha (11, 11). Si no solicita borde (width=0) y relleno verde (fill='green'), obtendrá un píxel verde en (10, 10). Sin embargo, si solicita las mismas opciones con un borde negro (width=1), obtendrá cuatro píxeles negros en (10, 10), (10, 11), (11, 10) y (11, 11).

El relleno es el área dentro del contorno. Su apariencia predeterminada es transparente.

Para crear un objeto rectangular utilice lo siguiente:

id=C.create_rectangle(x0, y0, x1, y1, option, ...)

Este constructor devuelve el ID del objeto del rectángulo en ese Canvas. Las opciones incluyen:

Tabla 13. Opciones de rectángulo

activedash

Estas opciones especifican la apariencia del rectángulo cuando su estado es tk.ACTIVE, es decir, cuando el mouse está encima del rectángulo. Para valores de las opciones, consulte dash, fill, outline, outlinestipple, stipple y width below.

activefill

activeoutline

activeoutlinestipple

activestipple

activewidth

dash

Para producir un borde discontinuo alrededor del rectángulo, use esta opción para especificar un patrón de dash. Consulte la Sección 5.13.

dashoffset

Use esta opción para iniciar el patrón de guión del borde en un punto diferente en el ciclo, consulte la Sección 5.13.

disabledash

Estas opciones especifican la apariencia del rectángulo cuando su estado es tk.DISABLED.

disablefill

disabledoutline

disabledoutlinestipple

disabledstipple

disabledwidth

fill

Por defecto, el interior de un rectángulo está vacío, y puede obtener este comportamiento con fill=''. También puede establecer la opción en un color, consulte la Sección 5.3.

offset

Use esta opción para cambiar el desplazamiento del patrón de punteado interior. Consulte la Sección 5.14.

outline

El color del borde. El valor predeterminado es outline='black'.

outlineoffset

Use esta opción para ajustar el desplazamiento del patrón de punteado en el contorno, consulte la Sección 5.14.

outlinestipple

Use esta opción para producir un contorno punteado. Se especifica el patrón por un mapa de bits, consulte la Sección 5.7.

state

Por defecto, los rectángulos se crean en el estado tk.NORMAL. El estado es tk.ACTIVE cuando el mouse está sobre el rectángulo. Establezca esta opción en tk.DISABLED para atenuar el rectángulo y hacer que no responda a eventos del mouse.

stipple

Un mapa de bits que indica cómo se punteará el interior del rectángulo. El valor predeterminado es stipple='', lo que significa un color sólido. Un valor típico sería stipple='gray25'. No tiene ningún efecto a menos que el relleno se haya establecido en algún color. Ver la Sección 5.7.

tags

Si se trata de una sola cadena, el rectángulo se etiqueta con esa cadena. Use una tupla de cadenas para etiquetar el rectángulo con varias etiquetas. Ver sección 8.4.

width

Ancho del borde. El valor predeterminado es 1 píxel. Use width=0 para hacer el borde invisible. Consulte la Sección 5.1.


8.14 Objetos de texto de lienzo

Puede mostrar una o más líneas de texto en un Canvas creando un objeto de texto:

id=C.create_text(x, y, option, ...)

Esto devuelve el ID de objeto del objeto texto de Canvas. Las opciones incluyen:

Tabla 14. Opciones de texto de lienzo

activefill

El color del texto que se utilizará cuando el texto esté activo, es decir, cuando el mouse esté sobre él. Para conocer los valores de las opciones vea fill.

activestipple

El patrón de punteado que se utilizará cuando el texto esté activo. Para conocer los valores de las opciones vea stipple.

anchor

El valor predeterminado es anchor=tk.CENTER, lo que significa que el texto está centrado verticalmente y horizontalmente alrededor de la posición (x, y). Consulte la Sección 5.5.

Por ejemplo, si especifica anchor=tk.SW, el texto será colocado de modo que su esquina inferior izquierda esté en el punto (x, y).

disablefill

El color del texto que se utilizará cuando el estado del objeto de texto sea tk.DISABLED. Para conocer los valores de las opciones vea fill.

disablestipple

El patrón de punteado que se utilizará cuando el texto esté deshabilitado. Para conocer los valores de las opciones vea stipple.

fill

El color de texto predeterminado es negro, pero puede representarlo en cualquier color configurando la opción de relleno para ese color. Consulte la Sección 5.3.

font

Si no le gusta la fuente predeterminada, establezca esta opción en cualquier valor de fuente. Ver la Sección 5.4.

justify

Para pantallas de texto de varias líneas, esta opción controla cómo se justifican las líneas: tk.LEFT (el valor predeterminado), tk.CENTER o tk.RIGHT.

offset

El desplazamiento de punteado que se utilizará para representar el texto. Para más información, ver Sección 5.14.

state

Por defecto, el estado del elemento de texto es tk.NORMAL. Establezca esta opción en tk.DISABLED para hacer que no responda a los eventos del mouse, o configurarlo en tk.HIDDEN para hacerlo invisible.

stipple

Un mapa de bits que indica cómo se punteará el texto. El valor predeterminado es stipple='', Lo que significa sólido. Un valor típico sería stipple='gray25'. Ver sección sección 5.7.

tags

Si se trata de una sola cadena, el objeto de texto se etiqueta con esa cadena. Usa una tupla de strings para etiquetar el objeto con múltiples etiquetas. Consulte la Sección 8.4.

text

El texto que se mostrará en el objeto, como una cadena. Use caracteres de nueva línea '\n' para forzar saltos de línea.

wisth

Si no especifica una opción de ancho , el texto se establecerá dentro de un rectángulo siempre como la línea más larga. Sin embargo, también puede establecer la opción de ancho en una dimensión, y cada línea del texto se dividirá en líneas más cortas, si es necesario, o incluso en palabras, para caber dentro del ancho especificado. Consulte la Sección 5.1.

Puede cambiar el texto que se muestra en un elemento de texto.

- Para recuperar el texto de un elemento con ID de objeto I en el Canvas, llame a C.itemcget(I, 'text').

- Para reemplazar el texto de un elemento con ID de objeto I en el Canvas con el texto de una cadena S, llame a C.itemconfigure(I, text=S).

Varios métodos de lienzo le permiten manipular elementos de texto. Consulte la Sección 8.6, especialmente dchars, focus, icursor, index e insert.


8.15 Objetos de ventana en Canvas

Puede colocar cualquier widget de Tkinter en un Canvas utilizando un objeto de ventana. Una ventana es un área rectangular que puede contener un widget Tkinter. El widget debe ser el hijo de la misma ventana de nivel superior que el Canvas, o el hijo de algún widget ubicado en la misma ventana de nivel superior.

Si desea colocar objetos complejos de múltiples widgets en un lienzo, puede usar este método para colocar un widget de Marco (Frame) en el Canvas y luego colocar otros widgets dentro de ese marco.

Para crear un nuevo objeto de ventana en Canvas:

id=C.create_window(x, y, option, ...)

Esto devuelve la ID del objeto para el objeto de la ventana. Las opciones incluyen:

Tabla 15. Opciones de ventana de Canvas

anchor

El valor predeterminado es anchor=tk.CENTER, lo que significa que la ventana está centrada en la posición (x, y). Consulte la Sección 5.5.

Por ejemplo, si especifica anchor=tk.E, la ventana se posicionará de modo que el punto (x, y) esté en el punto medio de su borde derecho (este).

height

La altura del área reservada para la ventana. Si se omite, el tamaño de la ventana se ajustará a la altura del widget contenido. Consulte la Sección 5.1.

state

Por defecto, los elementos de la ventana están en el estado tk.NORMAL. Establezca esta opción en tk.DISABLED para que la ventana no responda a la entrada del mouse, o tk.HIDDEN para que sea invisible.

tags

Si se trata de una sola cadena, la ventana está etiquetada con esa cadena. Use una tupla de cadenas para etiquetar la ventana con varias etiquetas. Consulte la Sección 8.4.

wisth

El ancho del área reservada para la ventana. Si se omite, el tamaño de la ventana se ajustará al ancho del widget contenido.

window

Use window=w donde w es el widget que desea colocar en el Canvas.

Si esto se omite inicialmente, posteriormente puede llamar a C.itemconfigure(id, window=w) para colocar el widget w sobre el Canvas, donde ID es el ID del objeto de la ventana.


Hasta el próximo jueves, salud y saludos!
Mauricio José Tobares

No hay comentarios:

Publicar un comentario

TkInter - de marciano a humano - sección 13 - El Widget LabelFrame

  13 El widget LabelFrame El widget LabelFrame al igual que el widget Frame es un contenedor espacial, un área rectangular que puede...