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