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

Prop `className` did not match in next js app

I have written a sample code ( Github Link here ). this is a simple next js app, but giving me error when I refresh the page. This seems to be the common problem and I tried the fix provided in the internet but does not seem to fix my issue. The error is Warning: Prop className did not match. Server: "MuiBox-root MuiBox-root-1" Client: "MuiBox-root MuiBox-root-2". Did changes for _document.js, modified _app.js as mentioned in official website and solutions in stackoverflow. but nothing seems to work. Could someone take a look and help me whats wrong with the code? Via Active questions tagged javascript - Stack Overflow https://ift.tt/2FdjaAW

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