Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How do I make a canvas and a photo the same size on Tkinter?

I’m making a photo watermark programme using Python and Tkinter. Basically it allows the user to upload a photo and create a text watermark to put over the photo.

I’m working on a function so that the user can move the text watermark to wherever they want on the photo based on the x and y coordinates. Therefore, I’m trying to have the canvas be the same height and width as the photo so the user can easily play around with the watermark placement.

However, the canvas always seems to be bigger than the photo that gets uploaded and I’m not really sure why.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Here’s the code I have so far, that takes the height and width of the photo and sets them as the size of the canvas. I’ve then halved them for the placement of the photo uploaded so that the photo is right in the middle of the canvas.

import tkinter
from tkinter import filedialog
from PIL import ImageTk
from tkinter import *
from PIL import Image

window = tkinter.Tk()
window.title("Image Watermarker")
window.config(padx=50, pady=10, bg='#ADD8E6', width=1000, height=1000)

# Choose photo to watermark, adds to window
upload = filedialog.askopenfilename(initialdir='/', title="Select an Image",
                                    filetypes=(('png files', '*.png'), ('jpeg files', '*.jpeg')))
photo = ImageTk.PhotoImage(Image.open(upload))
h = photo.height()
w = photo.width()
canvas = Canvas(window, width=w, height=h, highlightthickness=0)
canvas.create_image((h / 2), (w / 2), image=photo, anchor=CENTER)

canvas.pack()

>Solution :

Change the line to:

canvas.create_image((w/2), (h/2), image=photo, anchor=CENTER)

as you just only swapped the order of width and height.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading