ayuda midiendo el tamaño de una ventana

Pablo Rodríguez oinos en web.de
Lun Dic 31 14:11:10 CET 2007


Hola a todas y todos,

en la pequeña utilidad que incluyo abajo, necesito en el fondo saber
dónde tengo que colocar, o cómo tengo que definir, la orden
"self.width,self.height = win.get_size()" para que me dé valores
distintos si la ventana cambia de tamaño.

Para hacer pruebas tengo un orden "print self.width, self.scale;" en
on_expose. (En realidad, necesito que recalcule también self.scale, pero
supongo que con el ejemplo anterior ya sabré cómo adaptarlo a éste).

Seguro que es una tontería, pero no sé cómo hacerlo y es importante para
mí.

Gracias y un feliz Año,


Pablo



#!/usr/bin/python
# coding: utf-8

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.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):
        print self.width, 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.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