problemas de un novato con ventanas

Pablo Rodríguez oinos en web.de
Vie Dic 28 00:57:36 CET 2007


Hola a tod en s,

soy nuevo en esto de Python y la programación en general, pero tengo
muchísimo interés en poder cambiar un pequeño código que ajunto al final.

El código es mi modificación del ejemplo de demostración (demo/demo.py)
que viene con la última versión de
http://www.gnome.org/~gianmt/pypoppler-0.6.2.tar.gz, esto es, la
biblioteca de enlaces de poppler, un visor de PDF, en python.

Necesito mejorar una cosa, que es la siguiente: hacer que on_expose (que
si no estoy muy perdido es lo que dibuja la página) no esté sólo fijado
a las dimensiones de partida (start_width y start_height), sino que
cuando cambie el tamaño de la ventana cambie también el tamaño de self.dwg.

No sé si está clara mi explicación. Lo que quiero es que el PDF no sólo
esté en vista completa ajclaro ustada al tamaño de la ventana cuando lo
inicio, sino siempre e independientemente del tamaño de la ventana.

Me gustaría poder hacerlo sin tener que modificar on_changed, sino
modificando on_expose.

Agradeceria mucho vuestra ayuda. Felices fiestas a tod en s,


Pablo


.
#!/usr/bin/python

import gtk
import poppler
import sys
import cairo

class popplerrender(object):
    def __init__(self):
        uri = "file://" + sys.argv[1]

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

        win = gtk.Window(gtk.WINDOW_TOPLEVEL)
        start_width, start_height = 500, 500
        win.set_default_size(start_width, start_height)
        win.set_title ("Window Poppler Demo")
        win.connect("delete-event", gtk.main_quit)

        self.width, self.height = win.get_size()
        self.page_width, self.page_height= self.current_page.get_size()
        if (self.width/self.page_width) < (self.height/self.page_height):
            self.scale = self.width/self.page_width
        else:
            self.scale = self.height/self.page_height

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

        adjust = gtk.Adjustment(0, 0, (self.n_pages-1), 1)
        page_selector = gtk.SpinButton(adjust, 0, 0);
        page_selector.connect("value-changed", self.on_changed)

        hbox = gtk.HBox(False, 0)

        vbox = gtk.VBox(False, 0)
        vbox.pack_start(hbox, False, False, 0)

        hbox.pack_start(page_selector, False, False, 0)

        self.dwg = gtk.DrawingArea()
        self.dwg.set_size_request(int(self.width), int(self.height))
        self.dwg.connect("expose-event", self.on_expose)

        vbox.pack_start(self.dwg, True, True, 0)

        win.add(vbox)

        win.show_all()

    def on_changed(self, widget):
        self.current_page =
self.document.get_page(widget.get_value_as_int())
        self.dwg.set_size_request(int(self.width),
                                  int(self.height))
        self.dwg.queue_draw()

    def on_expose(self, widget, event):
        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.rectangle(0, 0, self.page_width, self.page_height)
        cr.fill()
        self.current_page.render(cr)

    def main(self):
        gtk.main()

if __name__ == '__main__':
    pop = popplerrender()
    pop.main()
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





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