Skip to main content

I can't get Python and tkinter to display a photo on a canvas [duplicate]

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.

  1. I did add mainloop() at the bottom. It didn't help.

  2. 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

Popular posts from this blog

How to show number of registered users in Laravel based on usertype?

i'm trying to display data from the database in the admin dashboard i used this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count(); echo $users; ?> and i have successfully get the correct data from the database but what if i want to display a specific data for example in this user table there is "usertype" that specify if the user is normal user or admin i want to user the same code above but to display a specific usertype i tried this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count()->WHERE usertype =admin; echo $users; ?> but it didn't work, what am i doing wrong? source https://stackoverflow.com/questions/68199726/how-to-show-number-of-registered-users-in-laravel-based-on-usertype

Why is my reports service not connecting?

I am trying to pull some data from a Postgres database using Node.js and node-postures but I can't figure out why my service isn't connecting. my routes/index.js file: const express = require('express'); const router = express.Router(); const ordersCountController = require('../controllers/ordersCountController'); const ordersController = require('../controllers/ordersController'); const weeklyReportsController = require('../controllers/weeklyReportsController'); router.get('/orders_count', ordersCountController); router.get('/orders', ordersController); router.get('/weekly_reports', weeklyReportsController); module.exports = router; My controllers/weeklyReportsController.js file: const weeklyReportsService = require('../services/weeklyReportsService'); const weeklyReportsController = async (req, res) => { try { const data = await weeklyReportsService; res.json({data}) console...

How to split a rinex file if I need 24 hours data

Trying to divide rinex file using the command gfzrnx but getting this error. While doing that getting this error msg 'gfzrnx' is not recognized as an internal or external command Trying to split rinex file using the command gfzrnx. also install'gfzrnx'. my doubt is I need to run this program in 'gfzrnx' or in 'cmdprompt'. I am expecting a rinex file with 24 hrs or 1 day data.I Have 48 hrs data in RINEX format. Please help me to solve this issue. source https://stackoverflow.com/questions/75385367/how-to-split-a-rinex-file-if-i-need-24-hours-data