Update: The answer by acw1668 did allow me to display the image. Thank you.
Searches for documentation for PhotoImage show it is hard to find. Online examples were easily misunderstood to indicate .jpg files were acceptable.
Previous update:
I edited the end of my explanation to show the suggested fix didn't work. I'm left wondering if people are avoiding the question because someone closed it, even though the recommended fix doesn't work or if I have a situation no one knows the answer to.
Sorry, I'm new to Stack Overflow and I am unfamiliar how the site works.
My original question begins here:
I'm trying to make python/tkinter show a photo image on a canvas. All I get is the background color.
I'm a retired programmer and now use python/tkinter to draw charts for my genealogy research and for whatever else catches my interest. This is the first time I've had trouble getting tkinter to do what I want.
I've narrowed the chunk down to a main routine that should, according to all the examples I've seen, display at least part of the photo. And because it is a main there should be no garbage collection issues.
The code:
#! python
from tkinter import *
# Program to test displaying a photo in Tkinter
cwidth = 500
cheight = 500
cback = '#353575'
tkx = Tk()
mycanvas = Canvas( tkx, width=cwidth, height=cheight, bg=cback)
mycanvas.pack()
# This image is 1400 x 1239
imag = PhotoImage( 'C:\\Users\\Owner\\Documents\\HouseStuff\\Shutters\\MapleLeaf.jpg' )
print( 'image', imag )
imgid = mycanvas.create_image( (50, 50), image=imag, anchor=NW )
print( 'imgid', imgid )
mycanvas.pack()
print('Bottom of main')
input()
The first print statement echoed the image path. The second printed "1".
I have no buttons or other widgets. All I do is display. The input() at the bottom is to hold the canvas in place because it disappears when the program exits. This is my standard method when displaying charts.
I've seen examples that say: "import tkinter as tk' and when I do that the canvas instantiation isn't found. Examples also show "tk.PhotoImage" but when I do that I get the error message "'_tkinter.tkapp' has no attribute 'PhotoImage'" I've seen documentaton saying "tk.PhotoImage" but don't define what kind of thing "tk" is.
What I get when I run this is a canvas window of the appropriate size with a uniform background color of blue. I don't get the photo.
I'm aware the photo is much bigger than the canvas I'm using for display. Once I get a bit of the image I'll worry about scaling the window and the photo.
I'm not so interested of redoing this in Pillow because I'm familiar with tkinter and not Pillow and want to draw on the photo after I display it.
Thanks for your help.
The first response suggested I add mainloop() at the bottom of the routine.
-
I did add mainloop() at the bottom. It didn't help.
-
There are no other GUI related events. This program just displays.
source https://stackoverflow.com/questions/76887153/i-cant-get-python-and-tkinter-to-display-a-photo-on-a-canvas
Comments
Post a Comment