python - tkinter root window isn't quite the right size -
i creating tkinter canvas, , need check when user changes size of window. problem is, window apparently isn't size it's supposed be. have following:
def print_size(self): print self.root.winfo_width() def init_simulation(self, size=300): self.root = tk() canvas = canvas(self.root, width=size, height=size) self.print_size() self.root.after(1000, self.print_size)
when running get:
1
and second later:
306
ignoring fact tkinter add 6 pixels, why size first 1 , 306? setting wrong?
when instantiate root widget tk()
, tkinter starts process in separate thread create window - doesn't happen in main loop.
the reason 1
size root window doesn't exist yet when call self.print_size
first time, gives default value of 1
. next time call second later, window has finished spawning, gives the actual size. it's race condition - main event loop gets print self.root.winfo_width()
before self.root done being created.
if you'd change behavior, add line right after self.root = tk()
:
self.root.wait_visibility(self.root)
that command forces main event loop pause until given widget (in case root window) has been spawned , visible.
also, note you've set size of canvas 300 pixels, naturally container window have width.