En tkinter, ¿por qué winfo_height () siempre devuelve 1?

Este es el ejemplo más fácil.

#py3 from tkinter import * tk = Tk() canvas = Canvas(tk, width= 500 , height = 400) canvas.winfo_height() #In [4]: canvas.winfo_height() #Out[4]: 1 

Tienes que empacar el elemento de canvas en la ventana antes de obtener su altura. El retorno de altura es la altura real .

 >>> from tkinter import * >>> tk = Tk() >>> canvas = Canvas(tk, width= 500 , height = 400) >>> canvas.winfo_height() 1 >>> canvas.pack() >>> canvas.winfo_height() 402 

Si no funciona con la función pack() , puedes intentar agregar canvas.update() después de usar canvas.pack() .