From b41e2f86f8c1b7ab9645a975af3d9adfc2a53d3c Mon Sep 17 00:00:00 2001 From: Carlos Carvallo Date: Wed, 03 Apr 2013 17:54:34 +0000 Subject: primera version del barrido sin pixbuf --- (limited to 'V2-1barrido.py') diff --git a/V2-1barrido.py b/V2-1barrido.py new file mode 100755 index 0000000..f4b6731 --- /dev/null +++ b/V2-1barrido.py @@ -0,0 +1,118 @@ +#!/usr/bin/python +import gtk, gobject + +DELAY = 5 +DELTA = 1 +WIDTH = 453 +HEIGHT = 453 + +class DrawingArea: + def __init__(self): + + window = gtk.Window() + window.set_default_size(WIDTH, HEIGHT) + + self.DELTA_X = DELTA + self.DELTA_Y = DELTA + + # Variable global que ira indicando el "indice" de pixel donde dibujar + # la linea vertical + self._x = 0 + + # Variable global que contendra el "indice" de pixel donde el usuario + # presiono alguna tecla para detenerlo. El valor inicial -1 indica que + # todavia no se ha presionado una tecla para la linea vertical + self._selected_x = -1 + + # Variable global que ira indicando el "indice" de pixel donde dibujar + # la linea horizontal + self._y = 0 + + # Variable global que contendra el "indice" de pixel donde el usuario + # presiono alguna tecla para detenerlo. El valor inicial -1 indica que + # todavia no se ha presionado una tecla para la linea horizontal + self._selected_y = -1 + + self.drawingarea = gtk.DrawingArea() + + window.connect("destroy", lambda w: gtk.main_quit()) + self.drawingarea.connect("expose-event", self.area_expose_cb) + window.connect('key-press-event', self.__key_press_cb, self.drawingarea) + + window.add(self.drawingarea) + window.show_all() + + gobject.timeout_add(DELAY, self.__move_vertical_line, self.drawingarea) + + def area_expose_cb(self, area, event): + self.style = self.drawingarea.get_style() + self.gc = self.style.fg_gc[gtk.STATE_NORMAL] + + def draw_line(self, drawing_area, orientation, line_index): + + if orientation == "VERTICAL": + + self.drawingarea.window.draw_line(self.gc, line_index, 0, self._x, HEIGHT) + + else: + self.drawingarea.window.draw_line(self.gc, 0, line_index, WIDTH, self._y) + + self.drawingarea.queue_draw() + + def __move_vertical_line(self, drawingarea): + + # Mover el indice x para que aparente movimiento + self._x += self.DELTA_X; + if self._x > WIDTH: + self.DELTA_X *= -1 + elif self._x < 0: + self.DELTA_X *= -1 + + # Dibujar una linea vertical en la x correspondiente + self.draw_line(drawingarea, "VERTICAL", self._x) + + # Si aun no se selecciono un indice para x, seguir permitiendo invocar + # al timer. Caso contrario, retornar False para evitar mas invocaciones + if self._selected_x < 0: + return True + else: + return False + + def __move_horizontal_line(self, drawingarea): + + # Mover el indice x para que aparente movimiento + self.draw_line(drawingarea, "VERTICAL", self._selected_x) + + # Mover el indice y para que aparente movimiento + self._y += self.DELTA_Y; + if self._y > HEIGHT: + self.DELTA_Y *= -1 + elif self._y < 0: + self.DELTA_Y *= -1 + + # Dibujar una linea horizontal en la y correspondiente + self.draw_line(drawingarea, "HORIZONTAL", self._y) + + # Si aun no se selecciono un indice para y, seguir permitiendo invocar + # al timer. Caso contrario, retornar False para evitar mas invocaciones + if self._selected_y < 0: + return True + else: + return False + + def __key_press_cb(self, window, event, drawingarea): + + # Al presionar cualquier tecla, determinar la accion a tomar, de + # acuerdo al estado de las lineas. + + if self._selected_x == -1: + self._selected_x = self._x + gobject.timeout_add(DELAY, self.__move_horizontal_line, self.drawingarea) + elif self._selected_y == -1: + self._selected_y = self._y + gobject.timeout_add(DELAY, self.__draw_arc) + else: + self.restart_game(drawing_area) + +DrawingArea() +gtk.main() -- cgit v0.9.1