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))