[Python-es] [pygtk] pinchar el ratón no funciona

Pablo Rodríguez oinos en web.de
Jue Oct 17 21:15:06 CEST 2013


Hola a todas y todos,

tengo un pequeño programilla del que ni me acuerdo cómo escribí. (El
ejemplo está abajo.)

Todo funciona, pero necesito implementar "button_press_event()". Me temo
que no tira de ningún modo.

De lo que sé (que es muy poco), debería funcionar.

¿Alguien sería tan amable de indicarme el error?

Sé que es una cuestión específica de PyGTK. Hace tres meses que lo he
preguntado en la lista y no he tenido respuesta.

Agradecería mucho vuestra ayuda.

Saludos,


Pablo


import gnomevfs
import gtk
import pygtk
try:
    import poppler
except:
    print "poppler is not available"
import sys
import cairo
import gtk.glade

class rec_presentation:
    def __init__(self):

        uri = gnomevfs.make_uri_from_shell_arg(sys.argv[1])

        self.filename = sys.argv[1]

        self.document = poppler.document_new_from_file (uri, None)
        self.n_pages = self.document.get_n_pages()
        self.page_selector = self.document.get_page(0)
        self.current_page = 0

        self.gui = gtk.glade.XML("recslides.glade","mainwindow",
domain="recslides")
        self.win = self.gui.get_widget("mainwindow")
        self.area = self.gui.get_widget("pdfdocument_area")
        self.gui.signal_autoconnect(self)
        self.win.add_events(gtk.gdk.BUTTON_PRESS_MASK)

        self.width, self.height = self.win.get_size()
        self.page_width, self.page_height= self.page_selector.get_size()

        self.surface = cairo.ImageSurface(cairo.FORMAT_RGB24,
                                          int(self.width),
                                          int(self.height))

        black = gtk.gdk.color_parse("black")
        self.area.modify_bg(gtk.STATE_NORMAL, black)
        self.area.set_size_request(int(self.width), int(self.height))

        self.win.show_all()

    def button_press_event(self, widget, event):
        if event.button == 1:
            print 'Clicked at x={0}, y={0}'.format(event.x, event.y)

        self.win.connect('button-press-event', button_press_event)

    def on_expose_event(self, widget, event):
        add_x = 0
        add_y = 0

        if (self.area.allocation.width/self.page_width) <
(self.area.allocation.height/self.page_height):
            self.scale = self.area.allocation.width/self.page_width
        else:
            self.scale = self.area.allocation.height/self.page_height

        if (self.area.allocation.width/self.page_width) >
(self.area.allocation.height/self.page_height):
            add_x=
int(((self.area.allocation.width-(self.page_width*self.scale))/2)/self.scale)
        else:
            add_y=
int(((self.area.allocation.height-(self.page_height*self.scale))/2)/self.scale)

        cr = widget.window.cairo_create()
        cr.set_source_surface(self.surface)
        cr.set_source_rgb(1, 1, 1)

        if self.scale != 1:
            cr.scale(self.scale, self.scale)

        cr.translate(add_x, add_y)
        cr.rectangle(0, 0, self.page_width, self.page_height)
        cr.fill()
        self.page_selector.render(cr)

    def gtk_main_quit(self, widget, event):
        gtk.main_quit()

    def main(self):
        gtk.main()


rec = rec_presentation()
rec.main()

-- 
http://www.ousia.tk


Más información sobre la lista de distribución Python-es