Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

tkinter canvas image not displaying

I have a simple canvas being created in a function, and i would like an image displayed on the canvas.

def start(root):
    startframe = tkinter.Frame(root)
    canvas = tkinter.Canvas(startframe,width=1280,height=720)

    startframe.pack()
    canvas.pack()

    one = tkinter.PhotoImage('images\one.gif')
    canvas.create_image((0,0),image=one,anchor='nw')

when i run the code i get a blank 1280x720 window, no image.

i have looked at the following website: http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm but i do not understand how to apply their example to my situation (i dont know what to create a reference to or how to create a reference, if that is my problem). I have also looked at some stack overflow questions but they did not help either.

like image 726
Thedudxo Avatar asked Oct 21 '14 05:10

Thedudxo


2 Answers

  1. Escape backslashes in path string correctly. (or use r'raw string literal').

  2. Prevent PhotoImage object being garbage collected.

  3. specify the filename using file=... option.


def start(root):
    startframe = tkinter.Frame(root)
    canvas = tkinter.Canvas(startframe,width=1280,height=720)

    startframe.pack()
    canvas.pack()

    # Escape / raw string literal
    one = tkinter.PhotoImage(file=r'images\one.gif')
    root.one = one  # to prevent the image garbage collected.
    canvas.create_image((0,0), image=one, anchor='nw')

UPDATE

The two statements one = ... and root.one = one can be merged into one statement:

    root.one = one = tkinter.PhotoImage(r'images\one.gif')
like image 63
falsetru Avatar answered Sep 24 '22 12:09

falsetru


How about canvas.update()? I was suffering a similar problem. I am using grid, so instead of .pack I needed to use .update.

like image 32
David Rall Avatar answered Sep 24 '22 12:09

David Rall