[pygtk] Re: custom popup dialog
Alec Hussey
alec.hussey at gmail.com
Mon Oct 15 02:26:14 WST 2007
On Sat, 2007-10-13 at 22:24 +0300, Michael Baranov wrote:
> Here is a small standalone snippet illustrating of the problem.
>
> The allocation for each of the 2 entries does *not* reflect the
> actual on-screen size of the widgets, but rather the space allocated
> for them by the container. Can somebody tell me what's happening? Why
> the entries are not resized to their allocations? How to solve my
> problem? Thanks!!!
>
> #start
> import gobject
> import pygtk
> pygtk.require('2.0')
> import gtk
>
> def on_focus_in(widget, event):
> allocation = widget.get_allocation()
> print allocation.x, allocation.y, allocation.width,
> allocation.height
>
> if(__name__ == "__main__"):
> window = gtk.Window(gtk.WINDOW_TOPLEVEL)
> window.set_size_request(200, 100)
> window.set_title("GTK Entry")
> window.connect("delete_event", lambda w, e: gtk.main_quit())
>
> entry1 = gtk.Entry()
> entry2 = gtk.Entry()
>
> entry1.connect("focus-in-event", on_focus_in)
> entry2.connect("focus-in-event", on_focus_in)
>
> box = gtk.VBox()
> window.add(box)
>
> box.add(entry1)
> box.add(entry2)
>
> window.show_all()
> window.show()
> gtk.main()
> #end
> > Hello!
> >
> > I'm implementing a custom popup window for a gtk.Entry. Actually
> > it's a custom completion popup. but does not really matter. The real
> > question is:
> >
> > for a given gtk.Entry (parented, realized) get location of the
> > left-bottom corner of the entry in screen coordinates (in order to
> > position the popup window).
> >
> >
> > Part of the problem I solved myself:
> > window = entry.get_parent_window()
> > origin = window.get_origin()
> > origin returns left-top corner of window's client area in screen
> > coordinates. It's OK.
> >
> > But I'm not able to get *actual* entry position and size in window
> > coordinates. entry.get_allocation() returns allocation which not
> > always corresponds to *actual* on-screen size and position, but
> > rather reflects he space devoted to the widget. For example putting
> > gtk.Entry into gtk.VBox gives the above results.
> >
> > Help is much appreciated! Thanks!
> > --
> > Michael Baranov
> >
>
> --
> Michael Baranov
> _______________________________________________
> pygtk mailing list pygtk at daa.com.au
> http://www.daa.com.au/mailman/listinfo/pygtk
> Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/
Why dont you simply make a new gtk.Dialog and pack your Entry's into its
vbox. For example:
dialog = gtk.Dialog(None, None, gtk.DIALOG_MODAL)
dialog.set_title("GTK Entry")
entry1 = gtk.Entry()
entry2 = gtk.Entry()
entry1.connect("focus-in-event", on_focus_in)
entry2.connect("focus-in-event", on_focus_in)
dialog.vbox.pack_start(entry1)
dialog.vbox.pack_start(entry2)
dialog.run()
dialog.destroy()
--
Alec Hussey
More information about the pygtk
mailing list