Python Forum
tkInter and Pillow don't display any images in GUIs - program gives errors instead
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
tkInter and Pillow don't display any images in GUIs - program gives errors instead
#1
I'm searching the internet for like 2 hours now and can't find any solutions. I tried multiple images, converted them to .png, .gif and others, but nothing seems to work. I even tried to use Pillow at some point, but it resulted in "_tkinter.TclError: couldn't open "<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=24x24 at 0x73C970>": no such file or directory" error all the time. I even thought the size might be the issue, so I tried to rescale the images multiple times, but nothing works.

import tkinter as tk

w, h = (864, 576)

root = tk.Tk()


def firstGUI():
    canvas = tk.Canvas(root, height=h, width=w)
    canvas.pack()

    bg = tk.PhotoImage(file="characterwindow01.jpg")
    bg_l = tk.Label(root, image=bg)
    bg_l.place()


firstGUI()
root.mainloop()
With this script, I get the error "_tkinter.TclError: couldn't recognize data in image file "characterwindow01.jpg"" and I don't know what to search or do anymore. I am quite new to Python (or more like old but I keep "abandoning" Python every now and then because I program strictly for myself and only when I need something), so try to explain as much as possible, if you don't mind.

I use "def firstGUI():" for "faster access" later on so I can just open GUIs whenever I need to.


Error:
C:\Users\Admin\firstgui\Scripts\python.exe "D:/Program Files/python projects/firstgui/GUI.py" Traceback (most recent call last): File "D:/Program Files/python projects/firstgui/GUI.py", line 17, in <module> firstGUI() File "D:/Program Files/python projects/firstgui/GUI.py", line 12, in firstGUI bg = tk.PhotoImage(file="characterwindow01.jpg") File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 3545, in __init__ Image.__init__(self, 'photo', name, cnf, master, **kw) File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 3501, in __init__ self.tk.call(('image', 'create', imgtype, name,) + options) _tkinter.TclError: couldn't recognize data in image file "characterwindow01.jpg" Process finished with exit code 1
Additional info:

characterwindow01.jpg image is "stolen" from a game called Titan Quest, but only temporarily till I learn how to manage GUIs. I just felt that it looks quite good as a learning image as it has plenty of space to toy with.

I use Python 3.7, as I didn't really bother updating it for some reason.

Newest version of PyCharm is on duty! Using version 2019.2.3.

I am on Windows 7

If I forgot to include something, please tell me. I used the help (https://python-forum.io/misc.php?action=help) but I might've overlooked something.
Reply
#2
Try using pillow to open the image
import tkinter as tk
from PIL import Image, ImageTk
 
w, h = (864, 576)
 
root = tk.Tk()
 
 
def firstGUI():
    canvas = tk.Canvas(root, height=h, width=w)
    canvas.pack()
 
    bg = ImageTk.PhotoImage(Image.open("characterwindow01.jpg")) 
    bg_l = tk.Label(root, image=bg)
    bg_l.place()
 
 
firstGUI()
root.mainloop()
Reply
#3
Doesn't work: https://imgur.com/a/u5Hw2I8 (image of result and proof I changed the script and how the image should look like under it - two pictures in one link).

Script:

import tkinter as tk
from PIL import Image, ImageTk

w, h = (864, 576)

root = tk.Tk()


def firstGUI():
    canvas = tk.Canvas(root, height=h, width=w)
    canvas.pack()

    bg = ImageTk.PhotoImage(Image.open("characterwindow01.jpg"))
    bg_l = tk.Label(root, image=bg)
    bg_l.place()


firstGUI()
root.mainloop()
Reply
#4
its getting garbage collected and it will not show
import tkinter as tk
from PIL import Image, ImageTk
 
w, h = (864, 576)
 
root = tk.Tk()
 
 

canvas = tk.Canvas(root, height=h, width=w)
canvas.pack()
 
bg = ImageTk.PhotoImage(Image.open("characterwindow01.jpg"))
bg_l = tk.Label(root, image=bg)
bg_l.place()
 
 

root.mainloop()
Reply
#5
(Oct-26-2019, 04:05 PM)joe_momma Wrote: its getting garbage collected and it will not show
removed to save some space

So that would basically mean I can not use functions at all, even if I need them. I'm planning on doing something bigger than just a notepad with an image. Basically my imagination tells me about at least 3 additional GUIs - probably even more than that depending on what else I'll want to do, but that's for the future, first I want to learn how it's going with it.

I've even tried to convert it into a .gif (via Gimp or GNU - however you want to call it) but it didn't change anything. All in all, your "garbage collecting" idea doesn't seem to work either: https://i.imgur.com/rYexQTn.png
Reply
#6
Quote:So that would basically mean I can not use functions at all,
Nope just in your example, if you want success use guizero. tkinter is best implemented in a class.
bg_l.place()
where are you placing the image?
Quote:place = place_configure(self, cnf={}, **kw)
|
| place_configure(self, cnf={}, **kw)
| Place a widget in the parent widget. Use as options:
| in=master - master relative to which the widget is placed
| in_=master - see 'in' option description
| x=amount - locate anchor of this widget at position x of master
| y=amount - locate anchor of this widget at position y of master
| relx=amount - locate anchor of this widget between 0.0 and 1.0
| relative to width of master (1.0 is right edge)
| rely=amount - locate anchor of this widget between 0.0 and 1.0
| relative to height of master (1.0 is bottom edge)
| anchor=NSEW (or subset) - position anchor according to given direction
| width=amount - width of this widget in pixel
| height=amount - height of this widget in pixel
| relwidth=amount - width of this widget between 0.0 and 1.0
| relative to width of master (1.0 is the same width
| as the master)
| relheight=amount - height of this widget between 0.0 and 1.0
| relative to height of master (1.0 is the same
| height as the master)
| bordermode="inside" or "outside" - whether to take border width of
| master widget into account
Reply
#7
(Oct-28-2019, 07:21 PM)joe_momma Wrote:
Quote:So that would basically mean I can not use functions at all,
Nope just in your example, if you want success use guizero. tkinter is best implemented in a class.
bg_l.place()
where are you placing the image?
Quote:saving space

I actually looked into Guizero (haven't done anything in there yet), and I have to admit it looks way better. What I like the most there is that you don't have to type three lines of code to apply an image, but just one
app = App(title="guizero grid span example", width=460, height=210, layout="grid")
picture1 = Picture(app, image="std1.gif", grid=[0,0])
where "app" is the main window. A link to the website that seems to have a nice explanation: https://pythonprogramming.altervista.org/gui-zero/
Reply
#8
Try this

from tkinter import *

root = Tk()

canvas = Canvas(root, height = 864, width = 576)
canvas.pack()

img = PhotoImage(file = r'[file path]')
bg = Label(canvas, image = img)
bg.pack()

root.mainloop()
Reply
#9
(Oct-29-2019, 12:37 PM)Evil_Patrick Wrote: Try this

from tkinter import *

root = Tk()

canvas = Canvas(root, height = 864, width = 576)
canvas.pack()

img = PhotoImage(file = r'[file path]')
bg = Label(canvas, image = img)
bg.pack()

root.mainloop()

This did work: https://i.imgur.com/0fBt68B.png
Reply
#10
Is it even possible to set GUI element on a GUI element? I chose to use Guizero because it doesn't require me to convert all .jpg files to .gif, and the only thing I can do is either placing them on top of the image right in the middle or to the sides of the image. https://imgur.com/a/iqKOfNg

from guizero import *

app = App(title="Gui", height=576, width=864, layout="grid")
pic = Picture(app, image="characterwindow01.jpg", height=576, width=864, grid=[1, 1])
text = Text(app, text="Text text", color="#FFAADD", bg="#000000", grid=[1, 1])
text2 = TextBox(app, text="Text textbox", grid=[1, 1])

app.display()
I'm starting to think I should use another language for my GUIs...
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Problems trying to position images with Tkinter emont 3 672 Dec-12-2023, 07:20 AM
Last Post: menator01
  [PyGUI] GUIS Gibbse16 1 16,500 Mar-20-2021, 09:43 PM
Last Post: deanhystad
  [Tkinter] Noob question:Using pyttsx3 with tkinter causes program to stop and close, any ideas? Osman_P 4 5,232 Nov-14-2020, 10:51 AM
Last Post: Osman_P
  How to display results from terminal window onto tkinter. buttercup 0 3,603 Jul-21-2020, 04:41 AM
Last Post: buttercup
  [Tkinter] Loading Images to Tkinter with Pillow Tomli 2 12,883 Jun-18-2020, 03:26 AM
Last Post: Tomli
  [Tkinter] Problems to display Web Scraping values in Tkinter Lucas_Ribeiro 0 1,536 May-07-2020, 12:36 AM
Last Post: Lucas_Ribeiro
  Images in tkinter menator01 0 1,580 Apr-25-2020, 12:49 AM
Last Post: menator01
  Exiting/killing a program with tkinter but leaving the graphic on the screen jpezz 3 3,919 Apr-07-2019, 02:13 PM
Last Post: jpezz
  [Tkinter] Help with tkinter; images and button commands SheeppOSU 2 2,964 Mar-28-2019, 02:01 AM
Last Post: woooee
  Display and update the label text which display the serial value jenkins43 5 8,990 Feb-04-2019, 04:36 AM
Last Post: Larz60+

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020