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

Image not showing in tkinter button

I created a button with an image in Tkinter, but the image isn’t showing, i can just see a blank space in the button. Maybe my OS is the problem. I have Linux Mint 21 Xfce Edition.

from tkinter import ttk
from tkinter import filedialog
from tkinter import messagebox
from tkinter import dialog
from tkinter import *
from PIL import ImageTk, Image
from modules import fonts, buttons
import shutil
import os
virusscan_win = Tk()
        virusscan_win.title("Virus scan")
        virusscan_win.geometry('400x200+60+60')
        virusscan_win.configure(background="white")
        Message(text="The virus scanner gives them the ability to scan files, folders or their system for viruses and remove threats automatically.", width=250, font=fonts.sansserif_small, background = "white").place(x=10, y=10)
        safe_image=PhotoImage(file='./media/button.png')
        Button(master=virusscan_win, image=safe_image, text="Scan file").place(x=10, y=90)

Can anyone explain, what was wrong with my code? I already checked, is the file in the correct folder. the debugger also shows nothing.

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

>Solution :

Tkinter is notorious for aggressively garbage collecting image references, which leads to them being destroyed before the UI gets drawn. Something like this should work for getting an image onto a Button

from PIL import Image, ImageTk
from pathlib import Path


img_path = Path('C:/<path>/<to>/media/button.png')  # use the full path to your img file
with Image.open(img_path) as img: # open the image file
    img_tk = ImageTk.PhotoImage(img)  # get the image as a Tk object
button = Button(virusscan_win, image=img_tk)  # add image to button

Note that if your image is the wrong size for your button, you can resize it like so

img_tk = ImageTk.PhotoImage(img.resize(32, 32))  # or whatever size you need
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