Tabla de contenidos
El control DrawingArea (Área de Dibujo) proporciona un lienzo simple en el que se puede dibujar usando los métodos de gtk.DrawingArea. Un DrawingArea se crea con la función:
drawing_area = gtk.DrawingArea() |
Un DrawingArea (Área de Dibujo) se crea con un tamaño de (0,0) por lo que deberías usar el siguiente método para hacer el drawing_area visible:
drawing_area.set_size_request(ancho, alto) |
Hay unos cuantos métodos para dibujar en un área de dibujo y todos requieren un contexto gráfico (gtk.gdk.GC) , que encapsula la información necesaria para dibujar. Los atributos de un contexto gráfico son:
background # fondo cap_style # estilo de fin de linea clip_mask # máscara de recorte clip_x_origin # orígen x del rectángulo de recorte clip_y_origin # orígen y del rectángulo de recorte fill # relleno font # fuente foreground # color de frente function # función graphics_exposures # exposiciones gráficas join_style # estilo de unión line_style # estilo de linea line_width # ancho de linea stipple # patrón de relleno sub_window # subventana tile # título ts_x_origin # orígen x ts_y_origin # orígen y |
background (fondo) especifica el gtk.gdk.Color que se usa para dibujar el fondo.
foreground (frente) especifica el gtk.gdk.Color que se usa para dibujar el color de primer plano.
Para crear un gtk.gdk.Color se usa el método alloc_color() de la clase gtk.gdk.Colormap (Mapa de Color). El mapa de color asociado a un control se puede obtener con el método:
colormap = widget.get_colormap() |
Se puede especificar un gtk.gdk.Color cómo una cadena de texto (por ejemplo, "red" (rojo), "orange" (naranja), "navajo white" (blanco navajo) definida en el fichero rgb.txt de X Window), o cómo un triple de rojo, verde y azúl de enteros en el rango de 0 a 65535. Además, puedes especificar si el color es modificable (se puede cambiar después pero no puede compartirse) y si se debe hacer una búsqueda y quedarse con el color más parecido de entre los existentes si el color exacto no está disponible. El método alloc_color() se define así:
color = colormap.alloc_color(red, green, blue, writeable=FALSE, best_match=TRUE) color = colormap.alloc_color(spec, writeable=FALSE, best_match=TRUE) |
Por ejemplo:
navajowhite = colormap.alloc('navajo white')
cyan = colormap.alloc(0, 65535, 65535)
|
cap_style especifica el estilo de fin de linea que se usa cuando se dibuja el final de una linea que no esta unida a otras. Los estilos disponibles son:
| CAP_NOT_LAST | igual que CAP_BUTT para lineas con un ancho distinto de cero. Para lineas de ancho igual a cero, el punto final de la linea no se dibujará. |
| CAP_BUTT | los finales de las lineas se dibujan como cuadrados y se extienden hasta las coordenadas del punto final. |
| CAP_ROUND | los finales de las lineas se dibujan como semicírculos con el diámetro igual al ancho de la linea y centrados en el punto final. |
| CAP_PROJECTING | los finales de las lineas se dibujan como cuadrados y se extienden la mitad del ancho más allá del punto final. |
clip_mask especifica un gtk.gdk.Pixmap que se usa para recortar el dibujo.
clip_x_origin y clip_y_origin especifican los valores x e y del orígen del rectángulo de recorte relativos a la esquina superior izquierda del drawing_area (área de dibujo).
fill especifica el estilo de relleno que se usará al dibujar. Los estilos de relleno disponibles son:
| SOLID | dibuja con el color de primer plano. |
| TILED | dibuja con un pixmap cuadriculado. |
| STIPPLED | dibuja con un mapa de bits de patrón. Los píxeles correspondientes a los bits del mapa de bits que están a uno se dibujarán con el color de primer plano; los píxeles correspondientes a los bits que no están a uno se dejarán sin modificar. |
| OPAQUE_STIPPLED | dibuja usando el mapa de bits de patrón. Los píxeles correspondientes a los bits en el mapa de bits de patrón que están a uno se dibujarán con el color de primer plano; los píxeles correspondientes a los bits que no están a uno se dibujarán con el color de fondo. |
font es la gtk.gdk.Font (Fuente) que se usa cómo la fuente predeterminada para dibujar texto.
El uso del atributo font está obsoleto.
function especifica cómo se combinan los valores de los bits en los píxeles de orígen con los valores de los bits en los píxeles de destino para producir el resultado final. Los 16 valores diferentes se corresponden con las posibles tablas de verdad 2x2. Sólo un par de estos valores es útil normalmente; para imágenes a color, sólo COPY, XOR e INVERT generalmente son útiles. Para mapas de bits, AND y OR también suelen ser útiles. Los valores de función son:
COPY # Copiar INVERT # Invertir XOR # XOR CLEAR # Limpiar AND # Y AND_REVERSE # Y al revés AND_INVERT # Y invertida NOOP # Nada OR # O EQUIV # equivalencia OR_REVERSE # O al revés COPY_INVERT # Copiar invertido OR_INVERT # O invertido NAND # NAND SET # Fijar |
graphics_exposures especifica si las exposiciones gráficas están activadas (TRUE) o desactivadas (FALSE). Cuando graphics_exposures es TRUE, un fallo al copiar un píxel en una operación de dibujo producirá un evento expose; si la copia tiene éxito, se producirá un evento noexpose.
join_style especifica el estilo de unión que se usa cuando las lineas se juntan en un ángulo. Los estilos disponibles son:
| JOIN_MITER | los lados de cada linea se extienden para unirse en un ángulo. |
| JOIN_ROUND | los lados de las dos lineas se unen en un arco circular. |
| JOIN_BEVEL | los lados de las dos lineas se unen con una linea recta que tiene el mismo ángulo con cada linea. |
line_style especifica el estilo con el que se dibuja una linea. Los estilos disponibles son:
| LINE_SOLID | las lineas se dibujan solidas. |
| LINE_ON_OFF_DASH | se dibujan los segmentos impares; los segmentos pares no se dibujan. |
| LINE_DOUBLE_DASH | los segmentos impares son normales. Los segmentos pares se dibujan con el color de fondo si el estilo de relleno es SOLID, o con el color de fondo aplicado a la máscara del patrón si el estilo de relleno es STIPPLED. |
line_width especifica el ancho con el que se dibujan las lineas.
stipple especifica el gtk.gdk.Pixmap que se usará para dibujo con patrón cuando el relleno está puesto a STIPPLED o a OPAQUE_STIPPLED.
sub_window especifica el modo de dibujo de una gtk.gdk.Window que tiene hijas gtk.gdk.Window. Los valores posibles son:
| CLIP_BY_CHILDREN | sólo se dibuja en la propia ventana pero no en sus ventanas hijas. |
| INCLUDE_INFERIORS | dibuja en la ventana y en sus ventanas hijas. |
tile especifica el gtk.gdk.Pixmap que se usará para dibujo cuadriculado cuando el relleno esta puesto a TILED.
ts_x_origin y ts_y_origin especifican la posición iniciales de los mapas de bits de patrón y de dibujo cuadriculado).
Se puede crear un nuevo Contexto Gráfico con una llamada al método gtk.gdk.Window new_gc() :
gc = widget.window.new_gc(foreground=None, background=None, font=None, function=-1, fill=-1, tile=None, stipple=None, clip_mask=None, subwindow_mode=-1, ts_x_origin=-1, ts_y_origin=-1, clip_x_origin=-1, clip_y_origin=-1, graphics_exposures=-1, line_width=-1, line_style=-1, cap_style=-1 join_style=-1) |
Para crear un nuevo Contexto Gráfico con este método, el control debe ser del tipo de los que tienen una gtk.gdk.Window y el control debe estar realizado (es decir, la gtk.gdk.Window ha sido creada).
Los atributos del Contexto Gráfico pueden dejarse sin tocar o especificarse en el método new_gc() usando argumentos de palabras clave de Python.
Los atributos individuales de un gtk.gdk.GC se pueden establecer asignándole un valor al atributo. Por ejemplo:
gc.cap_style = CAP_BUTT gc.line_width = 10 gc.fill = SOLD gc.foreground = micolor |
o usando los siguientes métodos:
gc.set_foreground(color) gc.set_background(color) gc.set_function(function) gc.set_fill(fill) gc.set_tile(tile) gc.set_stipple(stipple) gc.set_ts_origin(x, y) gc.set_clip_origin(x, y) gc.set_clip_mask(mask) gc.set_clip_rectangle(rectangle) gc.set_subwindow(mode) gc.set_exposures(exposures) gc.set_line_attributes(line_width, line_style, cap_style, join_style) |
El patrón intermitente que se usa cuando el estilo de linea es LINE_ON_OFF_DASH o LINE_DOUBLE_DASH se puede fijar usando el siguiente método:
gc.set_dashes(offset, dash_list) |
donde offset (desplazamiento) es el índice del valor inicial en dash_list y dash_list (lista de intermitencia) es una lista o tupla que contiene los números de los píxeles a dibujar o saltar para formar los segmentos. Los segmentos se dibujan empezando con el número de píxeles en la posición de desplazamiento; entonces, el siguiente número de píxeles no se dibuja; y luego el siguiente número es dibujado; y así, recorriendo todos los números de la lista de intermitencia y empezando otra vez cuando se llega al final. Por ejemplo, si la lista de intermitencia es (2, 4, 8, 16) y el desplazamiento es 1, los segmentos se dibujarán así: dibuja 4 píxeles, sáltate 8 píxeles, dibuja 16 píxeles, sáltate 2 píxeles, dibuja 4 píxeles y así sucesivamente.
Se puede copiar un gtk.gdk.GC existente usando el método:
gc.copy(src_gc)
|
Los atributos de gc serán los mismos que los de src_gc.