#!/usr/bin/python import gtk, gobject DELAY = 5 DELTA = 1 #WIDTH = 500 #HEIGHT = 500 class DrawingArea: def __init__(self): #window = gtk.Window() window = gtk.Window(gtk.WINDOW_POPUP) window.set_modal(True) screen = window.get_screen() self.WIDTH = screen.get_width() self.HEIGHT = screen.get_height() #window.set_size_request(WIDTH, HEIGHT) window.set_default_size(self.WIDTH, self.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, self.HEIGHT) else: self.drawingarea.window.draw_line(self.gc, 0, line_index, self.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 > self.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 > self.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()