Placing child window relative to parent in Tkinter python Placing child window relative to parent in Tkinter python tkinter tkinter

Placing child window relative to parent in Tkinter python


The short answer is, use winfo_rootx and winfo_rooty to get the coordinates relative to the screen. And yes, wm_geometry is the way to place a toplevel window precisely.

For example:

    x = parentWgdt.winfo_rootx()    y = parentWgdt.winfo_rooty()    height = parentWgdt.winfo_height()    geom = "+%d+%d" % (x,y+height)

As a bit of friendly advice, I recommend against abbrev var nms. It makes the code hard to read, especially when the abbreviation is wrong (Wgdt should at least be Wdgt). The difference in code size between geom and geometry, and Wgdt and Widget are tiny, but the difference in readability is huge.


According to Tk manual "https://www.tcl.tk/man/tcl8.4/TkCmd/winfo.htm#M52"If you need the true width immediately after creating a widget, invoke update to force the geometry manager to arrange it, or use winfo reqwidth to get the window's requested width instead of its actual width.

# This code works perfectlyself.update()self.geometry("+%d+%d" % (self.parent.winfo_rootx()+50,                          self.parent.winfo_rooty()+50                         )             ) 


to centring a modal window about a its parent window, I do so:

    alto_modal = 100    ancho_modal = 250    alto_parent = parent.winfo_height()    ancho_parent = parent.winfo_width()    x = (ancho_parent - ancho_modal) // 2    y = (alto_parent - alto_modal) // 2    self.geometry('{}x{}+{}+{}'.format(ancho_modal, alto_modal, x, y))