#!/usr/bin/python import gtk import gobject DELAY = 10 class MyApp(): def __init__(self): window = gtk.Window() hbox = gtk.HBox() vbox = gtk.VBox() #asignacion de variables a widgest de gtk self.vadjustment = gtk.Adjustment() self.hadjustment = gtk.Adjustment() #asignacion de valores por defecto self.vadjustment.set_upper(100) self.vadjustment.set_value(0) self.hadjustment.set_upper(100) self.hadjustment.set_value(0) #asignacion de propiedades de widgets self.vslide = gtk.VScale(self.vadjustment) self.hslide = gtk.HScale(self.hadjustment) self.vslide.set_digits(0) self.hslide.set_digits(0) self.vslide.set_draw_value(False) self.hslide.set_draw_value(False) #variables globales que se utilizan en los slides self.increment_x = 1 self.increment_y = 1 self.indicator_x = -1 self.indicator_y = -1 #asignacion de variables de widgets self.drawing_area = gtk.DrawingArea() self.drawing_area.set_size_request(600, 600) #imagen de fondo self.pixbuf = gtk.gdk.pixbuf_new_from_file('images/arco.jpg') window.connect("destroy", lambda w: gtk.main_quit()) self.drawing_area.connect('configure_event', self.__configure_cb) self.drawing_area.connect('expose-event', self.__expose_cb) #evento que invoca funcion al presionar cualquier tecla window.connect('key-press-event', self.__key_press_event_cb) #anhadiendo widgets dentro del contenedor principal window.add(hbox) hbox.add(vbox) vbox.add(self.drawing_area) vbox.add(self.hslide) hbox.add(self.vslide) #mostrando los widgets window.show_all() #invocacion de la funcion que realiza loop del slider horizontal gobject.timeout_add(DELAY, self.__hslider_move_cb) #funcion que se activa al presionar cualquier tecla y pregunta sobre el estado de los indicadores def __key_press_event_cb(self, window, event): gobject.timeout_add(DELAY, self.__vslider_move_cb) if self.indicator_x == 0: self.capturar_valor_vslider_cb() else: self.capturar_valor_hslider_cb() #funcion que hace el loop de los valores del slider horizontal def __hslider_move_cb(self): if self.indicator_x < 0: self.hadjustment.value += self.increment_x if self.hadjustment.value >= 100: self.increment_x *= -1 elif self.hadjustment.value <= 0: self.increment_x *= -1 return True else: return False #funcion que hace el loop de los valores del slider vertical def __vslider_move_cb(self): if self.indicator_y < 0: self.vadjustment.value += self.increment_y if self.vadjustment.value >= 100: self.increment_y *= -1 elif self.vadjustment.value <= 0: self.increment_y *= -1 return True else: return False #funcion que captura el valor del slider horizontal despues de pulsar una tecla def capturar_valor_hslider_cb(self): #variable en donde se captura el valor al presionar un tecla self.hslide_value = self.hslide.get_value() #convierte el valor de changed_value a int self.cv_x = (((int(self.hslide_value)) * 600) / 100) #detener el slider self.indicator_x = 0 #impresion temporal de prueba #print self.cv_x #funcion que captura el valor del slider vertical despues de pulsar una tecla def capturar_valor_vslider_cb(self): #variable en donde se captura el valor al presionar un tecla self.vslide_value = self.vslide.get_value() #convierte el valor de changed_value a int self.cv_y = (((int(self.vslide_value)) * 600) / 100) #invoca a la funcion que dibuja la pelota de acuerdo a los valores del slider self.draw_ball(self.cv_x,self.cv_y) #detener el slider self.indicator_y = 0 #impresion temporal de prueba #print self.cv_y self.dimensiones_arco() #funcion que dibuja la pelota def draw_ball(self, x, y): c_x = x c_y = y c_a = 70 c_l = 70 self.canvas.draw_arc(self.context, True, c_x, c_y, c_a, c_l, 0, 360*64) pi = 3.14159265 r = 35 area_pelota = pi * (r ** 2) #msg = "area pelota" #print msg + "" + str(area_pelota) self.calculo_gol(c_x, c_y) def calculo_gol(self, c_x, c_y): if c_x > 58 and c_y > 144 and c_x < 58+507 and c_y < 144+324: print "gol" def dimensiones_arco(self): #Coordenadas del rectangulo del travesanho t_x = 46 t_y = 133 t_a = 507 t_l = 336 #Coordenadas del rectangulo interior del arco i_x = 58 i_y = 144 i_a = 484 i_l = 324 #Dibujo temporal de los rectangulos del travesanho y el interior self.travesanho = self.canvas.draw_rectangle(self.context, False, t_x, t_y, t_a, t_l) self.interior_arco = self.canvas.draw_rectangle(self.context, False, i_x, i_y, i_a, i_l) self.area_travesanho = t_l * t_a self.area_interior_arco = i_l * i_a #print self.area_travesanho #print self.area_interior_arco def __configure_cb(self, drawing_area, data=None): x, y, width, height = drawing_area.get_allocation() canvas = drawing_area.window self.pixmap = gtk.gdk.Pixmap(canvas, width, height) self.pixmap.draw_pixbuf(None, self.pixbuf, 0, 0, 0, 0, -1, -1, gtk.gdk.RGB_DITHER_NONE, 0, 0) return True def __expose_cb(self, drawing_area, data=None): x, y, width, height = data.area style = drawing_area.get_style() self.context = style.fg_gc[gtk.STATE_NORMAL] self.canvas = drawing_area.window self.canvas.draw_drawable(self.context, self.pixmap, x, y, x, y, width, height) return False if __name__ == "__main__": my_app = MyApp() gtk.main()