pygtk:resizing
Questa è una vecchia versione del documento!
resize tweaks
First: the method gtk.Window.resize() doesnt't work with a single argument (as instead does gtk.Widget.set_size_request()). OK, this is documented, though ugly.
Now: if a gtk.Window w has size (100,100) and we run the following code:
w.resize(200,200) size = w.get_size() w.resize(*size)
, then the window won't resize to 200,200, but to 100,100. In fact “resize” doesn't really resize, it just queues a resize process, while if we use get_size we get the current size, not the queued one. This means if several functions try to resize (and it makes sense, if each one takes care of a single dimension), we have race conditions.
I solved that (both problems) with the following functions:
def unset_real_size(window, event):
"""Fields 'real width' and 'real height' become obsolete (or at least
useless) when a resize actually takes place.
"""
window.set_data('real width', None)
window.set_data('real height', None)
handler = window.get_data('configure handler')
if handler:
# The callback is now useless; remove it.
window.disconnect(handler)
window.set_data('configure handler', None)
def ensure_configure_handler(window):
"""Ensure that unset_real_size is called.
"""
if not window.get_data('configure handler'):
new_handler = window.connect('configure-event', unset_real_size)
window.set_data('configure handler', new_handler)
def set_width(window, width):
ensure_configure_handler(window)
window.set_data('real width', width)
height = window.get_data('real height')
if not height:
height = window.get_size()[1]
window.resize(width, height)
def set_height(window, height):
ensure_configure_handler(window)
window.set_data('real height', height)
width = window.get_data('real width')
if not width:
width = window.get_size()[0]
window.resize(width, height)
pygtk/resizing.1231890128.txt.gz · Ultima modifica: da pietro
